【问题标题】:PHP excute Python SFTP scriptPHP执行Python SFTP脚本
【发布时间】:2015-11-16 23:39:05
【问题描述】:

在 PHP 中我需要做一些 SFTP,但我遇到了问题,因为我不允许安装 SSH 扩展,而且 phpseclib 无法按我的需要工作。

因此,我将执行一个 Python 脚本来为我执行 SFTP。我想象的是做类似以下的事情

exec("SFTPUpload.py remoteFile serverLocation");

所以我执行 SFTPUpload.py,将我的服务器上需要传输的文件的位置以及它需要传输的服务器上的位置传递给它。

就 Python 脚本而言(我对 Python 不太熟悉),我想它会像下面这样

username='sftpUser'
password='sftpPassword'
port=22


#SFTP
client.load_system_host_keys()
print " hostname =%s \n username=%s \n password=%s \n" (hostname,username,password)
t = paramiko.Transport((hostname, port)) 
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(source,destination)
sftp.close()
t.close()

但是,我从 PHP 调用它的方式是,我需要 Python 在一个类中或其他东西中,以便我可以将变量传递给它。

我将如何实现这样的目标?

谢谢

【问题讨论】:

    标签: php python


    【解决方案1】:

    我相信您可以使用 exec() 函数来完成,正如您所描述的,只需在 Python 中解析命令行参数即可。

    喜欢:

    import sys
    
    print 'Number of arguments:', len(sys.argv), 'arguments.'
    print 'Argument List:', str(sys.argv)
    

    您可以像列表一样访问sys.argv 中的元素。

    (您还可以查看getopt module,它提供了更多(类似C)的参数传递选项,但我相信上述解决方案可以。)

    如果exec()函数不起作用,相信你可以考虑在PHP中使用system function

    类似这样的:

    $mystring = system('SFTPUpload.py remoteFile serverLocation', $retval);
    

    【讨论】:

    • 谢谢。我如何将我拥有的脚本变成一个可以接受变量的类?
    • 你为什么需要上课?通常,只有在您想要跟踪对象的状态时才引入类。对于您的代码,这似乎没有必要。另外,变量是指要传递给脚本的参数?因为这是通过像我描述的那样解析命令行参数来完成的;)
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多