Python原始输入不';使用子流程模块后无法工作
我正在使用子流程模块调用plink并在远程服务器上运行一些命令。这可以按预期工作,但在成功调用Python原始输入不';使用子流程模块后无法工作,python,python-2.7,subprocess,plink,Python,Python 2.7,Subprocess,Plink,我正在使用子流程模块调用plink并在远程服务器上运行一些命令。这可以按预期工作,但在成功调用子流程后。检查\u调用或子流程。检查\u输出原始输入方法似乎永远阻塞,并且不接受命令行中的输入 我把它简化为一个简单的例子: import subprocess def execute(command): return subprocess.check_call('plink.exe -ssh ' + USER + '@' + HOST + ' -pw ' + PASSWD + ' ' + c
子流程后。检查\u调用
或子流程。检查\u输出
原始输入方法似乎永远阻塞,并且不接受命令行中的输入
我把它简化为一个简单的例子:
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)
我在子流程中看到了相同的结果。检查调用和子流程。检查输出。如果我用stdin的直接读取(sys.stdin.read(10)
)替换最后的raw\u输入
调用,则程序不会接受输入
这是Windows7x64上的Python 2.7。你知道我做错了什么吗?”
编辑:如果我更改execute
以调用除plink之外的其他东西,它似乎可以正常工作
def execute(command):
return subprocess.check_call('cmd.exe /C ' + command)
这表明,普林克可能是问题所在。但是,我可以在控制台窗口中直接运行多个plink命令而不会出现问题。我可以通过将stdin连接到devnull来解决这个问题:
def execute(command):
return subprocess.check_call('plink.exe -ssh ' + USER + '@' + HOST + ' -pw ' + PASSWD + ' ' + command, stdin=open(os.devnull))
我周围没有Windows计算机来测试此功能,因此无法在此处复制它,但您是否尝试将close\u fds=True
传递到子进程。检查调用功能?只是尝试了一下,得到了相同的结果。我无法在我的Windows计算机上复制此功能。如果运行plink以外的程序,是否会发生这种情况?我想知道plink是否以某种奇怪的方式干扰了终端,最终破坏了原始输入。
。好主意。我试过了,它似乎确实能正常工作。不知道普林克在做什么。