使用子进程模块后,Python raw_input不起作用

时间:2014-08-26 12:59:48

标签: python python-2.7 subprocess plink

我使用子进程模块调用plink并在远程服务器上运行某些命令。这可以按预期工作,但在成功调用subprocess.check_callsubprocess.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_callsubprocess.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命令而不会出现问题。

1 个答案:

答案 0 :(得分:2)

我能够通过将stdin附加到devnull来解决这个问题:

def execute(command):
    return subprocess.check_call('plink.exe -ssh ' + USER + '@' + HOST + ' -pw ' + PASSWD + ' ' + command, stdin=open(os.devnull))