Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用subprocess在python中执行linux命令,然后获取结果提示符_Python_Linux_Subprocess_Popen_Prompt - Fatal编程技术网

使用subprocess在python中执行linux命令,然后获取结果提示符

使用subprocess在python中执行linux命令,然后获取结果提示符,python,linux,subprocess,popen,prompt,Python,Linux,Subprocess,Popen,Prompt,我使用subacces.Popen在python中运行linux命令。 我试图使用这个命令ssh到另一台机器上,看看它是否提示我输入密码 但是,我不知道如何获取结果提示符并在python脚本中使用它 例如,如果我使用subprocess.Popen调用命令echo Hello World,那么我可以使用communicate方法从运行该命令中获取结果stdout 但我想做的是: 使用Popen运行:ssh-hostname-'echo Hello',然后获取结果以在python脚本中使用。因此,

我使用subacces.Popen在python中运行linux命令。 我试图使用这个命令ssh到另一台机器上,看看它是否提示我输入密码

但是,我不知道如何获取结果提示符并在python脚本中使用它

例如,如果我使用subprocess.Popen调用命令echo Hello World,那么我可以使用communicate方法从运行该命令中获取结果stdout

但我想做的是: 使用Popen运行:ssh-hostname-'echo Hello',然后获取结果以在python脚本中使用。因此,如果ssh遇到密码提示,我希望能够在python脚本中将该提示的输出用作字符串。最后,我希望能够在使用linux终端时退出此提示符,相当于键入^C。但是,当使用Popen和communicate时,它只是在实际的linux标准输出上显示提示符,而不会捕获提示符

我还希望在实际的linux终端stdout上不显示这个提示

以下是我一直在使用的代码。在获取正常标准输出时,此代码起作用:

p = subprocess.Popen(["ssh", hostName, "echo Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sshOutput, err = p.communicate()
当然,密码提示没有存储在sshOutput中,这就是问题所在。如果我运行以下命令,结果将是一个包含Hello的字符串

p = subprocess.Popen(["echo", "Hello"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result, err = p.communicate()

问题是ssh打印提示符并从当前tty而不是stdout/stdin读取密码。看

可能的解决办法:

将ssh的stdin和stdout从应用程序连接到从pty和读/写主pty。可以在Python中使用expect或pexpect。 在一些包装程序中运行ssh,这些程序将在它的stdin/stdout和ssh的stdin/stdout之间插入一个pty。也许会有用。在这种情况下,您可以继续使用子流程。 使用您也可以将其用于子流程。
听起来你想要一个预期,但是你能给出一个你正在谈论的输出的实际例子吗?我编辑了这个问题,并对我试图做的事情和它实际做的事情进行了完整的解释。对不起,我还是不太明白。你到底想得到什么,如果ssh遇到输入密码的提示,我希望能够在python脚本中使用该提示的输出作为字符串,我相信OP要求重定向stdout,以便脚本可以解析密码:等等。假设没有设置无密码ssh,当您尝试使用ssh连接到另一台机器时,系统会首先提示您输入密码。我希望能够获取该提示符的文本,并在调用ssh命令的python脚本中使用它。就像我有一个运行ls命令的python脚本,然后获取输出并在脚本中使用它一样,我希望能够获取密码提示输出。