我使用子进程模块调用plink并在远程服务器上运行某些命令。这可以按预期工作,但在成功调用subprocess.check_call
或subprocess.check_output
后,raw_input
方法似乎永远会阻止,并且不会在命令行接受输入。
我把它简化为这个简单的例子:
import subprocess
def execute(command):
return subprocess.check_call('plink.exe -ssh ' + USER + '@' + HOST + ' -pw ' + PASSWD + ' ' + command)
input = raw_input('Enter some text: ')
print('You entered: ' + input)
execute('echo "Hello, World"')
# I see the following prompt, but it's not accepting input
input = raw_input('Enter some more text: ')
print('You entered: ' + input)
我在subprocess.check_call
和subprocess.check_output
看到相同的结果。如果我用stdin(raw_input
)的直接读取替换最后的sys.stdin.read(10)
调用,程序确实接受输入。
这是Windows 7 x64上的Python 2.7。我有什么想法我做错了吗?'
编辑:如果我将execute
更改为调用除plink之外的其他内容,则它似乎正常工作。
def execute(command):
return subprocess.check_call('cmd.exe /C ' + command)
这表明plink可能是问题所在。但是,我可以直接在控制台窗口中运行多个plink命令而不会出现问题。
答案 0 :(得分:2)
我能够通过将stdin附加到devnull来解决这个问题:
def execute(command):
return subprocess.check_call('plink.exe -ssh ' + USER + '@' + HOST + ' -pw ' + PASSWD + ' ' + command, stdin=open(os.devnull))