python作为“批处理”脚本(即从python运行命令)

我在Windows环境下工作(我的笔记本电脑!),我需要一些运行其他程序的脚本,非常像Windows批处理文件。

我怎么能从python运行一个命令,让程序运行时,会替换脚本? 该程序是交互式的(例如,一致),并且始终保持打印线路并询问用户输入。

所以,只运行一个程序并打印输出是不够的。 程序必须接管脚本的输入/输出,相当于从.bat文件运行命令。

我尝试了os.execl,但它一直告诉我“无效参数”,并且它没有找到程序名(不搜索PATH变量); 我必须给它完整的路径..?!

基本上,在批处理脚本中,我可以编写:unison配置文件

我怎样才能在Python中实现相同的效果?

编辑:

我发现它可以用os.system( ... ) ,因为我不能接受我自己的答案,所以我正在回答这个问题。


编辑:这应该是一个评论,但是当我发布它时,我没有太多的观点。

非常感谢Claudiu,除了一件小事外,我几乎想要这个功能:我希望函数在程序退出时结束,但是当我一致尝试时,它不会将控制权返回给python脚本,而是返回到窗口命令行环境

>>> os.execlp("unison")

C:>Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

C:>
C:>
C:>

如何解决这个问题?


您应该使用子流程模块创建一个新的流程。

我并不熟悉Windows进程,但其Popen功能是跨平台的,应该根据OS特定的解决方案进行优化。

编辑:我认为你应该更喜欢子进程模块os。*操作系统特定的功能,它是跨平台和更pythonic(只是谷歌它)。 您可以轻松地等待结果,并干净地:

import os
import subprocess
unison = os.path.join(os.path.curdir, "unison")
p = subprocess.Popen(unison)
p.wait()

我发现os.system做我想要的,

感谢所有试图提供帮助的人。

os.system("dir")

就像运行批处理文件一样运行该命令


import subprocess

proc = subprocess.Popen(['unison', 'profile'], stderr=subprocess.PIPE,      
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE)

proc.stdin.write('user input')
print proc.stdout.read()

这应该有助于你开始。 如果您想要更详细的答案,请使用更多信息编辑您的问题!

链接地址: http://www.djcxy.com/p/77151.html

上一篇: python as a "batch" script (i.e. run commands from python)

下一篇: Read subprocess stdout and stderr concurrently