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

时间:2008-11-22 18:18:59

标签: python scripting batch-file

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

如何从python运行命令,使程序运行时,将替换脚本?该程序是交互式的(例如,同步)并保持打印行并始终要求用户输入。

因此,仅运行程序并打印输出是不够的。程序必须接管脚本的输入/输出,非常类似于从.bat文件运行命令。

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

基本上,在批处理脚本中我可以写: 联合概况

如何在python中实现相同的效果?

编辑:

我发现可以用os.system( ... )完成,因为我无法接受我自己的答案,所以我正在结束这个问题。


编辑:这应该是一个评论,但是当我发布它时,我没有多少分。

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

>>> 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:\>

如何解决这个问题?

4 个答案:

答案 0 :(得分:18)

您应该使用subprocess module创建新流程。

我不熟悉Windows流程,但它的Popen功能是跨平台的,应该优先考虑特定于操作系统的解决方案。

编辑:我认为你应该更喜欢Subprocess模块​​到os。* OS特定的功能,它是跨平台的,更pythonic(只是谷歌)。您可以轻松等待结果,干净地

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

答案 1 :(得分:6)

我发现os.system做了我想做的事,

感谢所有想要帮助的人。

os.system("dir")

运行命令就像从批处理文件

运行一样

答案 2 :(得分:4)

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()

这应该可以帮助您入门。如果您想要更详细的答案,请使用更多信息编辑您的问题!

答案 3 :(得分:2)

os.execlp应该有效。这将搜索您的路径以获取该命令。如果没有必要,不要给它任何参数:

>>> import os
>>> os.execlp("cmd")

D:\Documents and Settings\Claudiu>Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

D:\Documents and Settings\Claudiu>