【发布时间】:2015-07-25 02:19:39
【问题描述】:
我有一个脚本将文件写入磁盘,然后需要使用 psftp 将其上传到远程服务器。
根据我在这个网站上看到的一些答案,我对自己想要做什么有了一个基本的了解,但是因为:
我的代码是用 Python 3.x 编写的
我的代码在命令中混合使用了字符串和变量
我没有成功。
这是我的代码(设置变量后)
connection_string = "" +prog+ "-P " +port+ "-pw " +passwd+ " " +user+"@"+host
p = subprocess.Popen(connection_string.split(),stdin=subprocess.PIPE, stdout=subprocess.PIPE,shell=True)
sftp_cmd = "put "+upload_file
encoded_cmd = str.encode(sftp_cmd)
p.stdin.write(encoded_cmd)
# I would have rather used p.stdin.write(b'sftp_cmd') to create a buffer from the string but that didn't seem to work either.
代码编译,但文件没有上传
1) 我做错了什么? :-)
2) 我如何查看是否建立了连接以及实际通过了什么命令?
3) 这是调用 psftp 的最佳方式吗,或者我应该每次都即时编写一个批处理文件并使用“-b”标志来调用它?
注意。我不能在我的代码中使用标准 Python 发行版不附带的任何库。所以我必须使用psftp。
参考答案:
Can i control PSFTP from a Python script?
formatting strings for stdin.write() in python 3.x
TIA
【问题讨论】:
-
不能使用 paramiko 等其他库的任何具体原因?另外,您可能想看看 pscp。
-
由于公司限制,我无法使用外部库。 scp 似乎在服务器上被阻止(我无法控制它)
-
现在我将命令写入文件并使用 psftp -b 但仍然想知道如何以更 Python 的方式执行此操作。
-
Don't use a list argument and
shell=Truetogether 在 POSIX 系统上。 -
不要:
klass.method(some_object),而是打电话给some_object.method(),例如sftp_cmd.encode()。
标签: python python-3.x pipe subprocess sftp