【发布时间】:2016-12-02 01:40:35
【问题描述】:
我已经为此工作了很长时间,如果有任何帮助,我们将不胜感激。
我在这里尝试做的是 ssh 到测试服务器,然后 cd ..,然后通过 python 打印该文件夹中的目录列表。这段代码是我最好的尝试:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
print "Test 1"
proc_stdout = process.communicate()[0].strip()
#proc_stdout= process.stdout.readlines() (Gives same outcome as communicate)
#proc_stdout= process.stdout.read() (Gives same outcome as communicate)
print "Test 2"
print proc_stdout
subprocess_cmd('ssh user@server -p 111;cd ..;ls')
由于某种原因,这个函数总是挂在“proc_stdout=”步骤。它从不打印“Test 2”或返回文件列表。如果我取出 ssh 命令,它工作正常。我希望在终端中看到的是这样的,但终端却挂起,我无法再与之交互:
dredbounds-computer: python file_name.py
Test 1
Test 2
FileA
FileB
FileC
更新: 我修改了代码并把 proc_stdout=process.stderr。交流()。 这是我更新的代码:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
print "Test 1"
proc_stderr= process.stderr. communicate()
print "Test 2"
print proc_stderr
print "Test 3"
运行此程序,我在终端中收到以下错误:
dredbounds-computer: python terminal_test.py
Test 1
Traceback (most recent call last):
File "file_name.py", line 26, in <module>
subprocess_cmd('ssh user@server -p 111;cd ..;ls')
File "terminal_test.py", line 21, in subprocess_cmd
proc_stdout= process.stderr. communicate()
AttributeError: 'NoneType' object has no attribute 'communicate'
有谁知道我可以如何修复此代码,或以其他方式做同样的事情。不知道为什么这给了我一个无类型错误。我如何调用我的 ssh 命令有什么问题吗?我已经在终端中手动输入了相同的命令,它会返回一个目录列表,所以理论上它应该可以工作。有什么建议吗?
【问题讨论】:
-
通信等到进程退出(如果您正在执行
ssh,这可能是您键入“exit”时) -
我也尝试使用 proc_stdout= process.stdout.readlines() 和 proc_stdout= process.stdout.read() 。结果相同。
-
它可能正在写信给
stderr。communicate返回一个元组,如果它无法连接到服务器,则可能没有任何内容写入 stdout。 -
谢谢,我试过了,并用我得到的输出更新了我的问题。
标签: python bash ssh subprocess