需要帮助,所以我要做的是: -
我想设置一个python程序,它将在后台打开命令提示符,我将能够将命令作为输入提供给python程序,然后它会将命令转发到命令提示符并给我输出,我想要这个连接建立我想要的时间,
我已经浏览了一些python代码,其中发生的是,当我输入命令时,它会立即显示结果然后退出,我不希望命令提示符的实例退出直到我想要,所以我可以进行更改,更改目录等。
我试过了,但没有这样的结果:(。
所以如果有任何想法可以帮助我。
Thnx人。
答案 0 :(得分:1)
如果您想使用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
的第四个主题。这并不容易,但source code to communicate
会告诉您如何操作。 (请务必阅读3.2或更高版本,因为早期版本实际上并没有正确执行。)
如果你想要更简单的东西,可以在PyPI上使用更高级的库,如pexpect
或任何十几个shell包装器。
答案 1 :(得分:0)
好的,现在我记得了。保持子进程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
。
参考此主题,Keeping a pipe to a process open
同样看一下这个问题,Using module 'subprocess' with timeout
另请参阅activestate http://code.activestate.com/recipes/576911-keep-a-process-up-and-running/
中的此代码