需要帮助,所以我想做的是:-
我想设置一个python程序,它将在后台打开命令提示符,我将能够将命令作为输入提供给python程序,然后它将命令转发到命令提示符并给我输出,我希望建立这个连接在我想要的时间里,
我已经通过了一些python代码,其中发生的情况是,当我输入命令时,它会立即显示结果然后退出,我不希望该命令提示符实例退出直到我想要,所以我可以进行更改,更改目录等。
我试过了,但没有这样的结果:(。
因此,如果有任何想法确实可以帮助我。
伙计们。
需要帮助,所以我想做的是:-
我想设置一个python程序,它将在后台打开命令提示符,我将能够将命令作为输入提供给python程序,然后它将命令转发到命令提示符并给我输出,我希望建立这个连接在我想要的时间里,
我已经通过了一些python代码,其中发生的情况是,当我输入命令时,它会立即显示结果然后退出,我不希望该命令提示符实例退出直到我想要,所以我可以进行更改,更改目录等。
我试过了,但没有这样的结果:(。
因此,如果有任何想法确实可以帮助我。
伙计们。
如果您想使用 执行此操作subprocess
,请执行以下操作:
p = subprocess.Popen(['sh'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
现在,每次你想发送一个命令,你都必须对p.stdin.write()
这个命令。你必须p.stdout.read()
得到结果。
但那些是阻塞呼叫。所以,你可能想要的是:
p.stdout.read()
并发布到queue.Queue
queue.Queue
并执行p.stdin.write()
.wait
线程Popen
。这并不容易,但源代码communicate
将向您展示如何做到这一点。(请务必阅读 3.2 或更高版本,因为早期版本实际上并没有做到这一点。)
如果您想要更简单的东西,请使用更高级别的库,例如pexpect
PyPI 上的十几个 shell 包装器中的任何一个。
好的,现在我想起来了。保持子进程shell打开的方法是保持stdin PIPE
打开
from subprocess import Popen, PIPE
process = Popen(['whatever'], stdin=PIPE, stdout=PIPE,shell=True)
process.stdin.write('Hello\n')
print repr(process.stdout.readline())
process.stdin.write('World\n')
print repr(process.stdout.readline())
#close
process.stdin.close()
process.wait()
但不推荐,也不可靠。使用pexpect
(非 Windows)和 Windows 使用winpexpect
.
参考此线程,保持通往进程的管道处于打开状态
也看看这个问题,Using module 'subprocess' with timeout
也看看这个来自activestate的代码,http: //code.activestate.com/recipes/576911-keep-a-process-up-and-running/