在后台打开命令提示符

时间:2013-07-16 00:40:02

标签: python

需要帮助,所以我要做的是: -

我想设置一个python程序,它将在后台打开命令提示符,我将能够将命令作为输入提供给python程序,然后它会将命令转发到命令提示符并给我输出,我想要这个连接建立我想要的时间,

我已经浏览了一些python代码,其中发生的是,当我输入命令时,它会立即显示结果然后退出,我不希望命令提示符的实例退出直到我想要,所以我可以进行更改,更改目录等。

我试过了,但没有这样的结果:(。

所以如果有任何想法可以帮助我。

Thnx人。

2 个答案:

答案 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/

中的此代码