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

Posted

技术标签:

【中文标题】python 作为“批处理”脚本(即从 python 运行命令)【英文标题】:python as a "batch" script (i.e. run commands from python) 【发布时间】:2010-09-23 14:52:53 【问题描述】:

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

如何解决这个问题?

【问题讨论】:

它有助于提供不起作用的脚本。 没有必要关闭问题,因为您无法接受您的答案。如果它是投票最多的,它基本上与被接受的相同..有点烦人,诚然,但关闭不是正确的方法,我会说.. 【参考方案1】:

您应该使用subprocess module 创建一个新进程。

我不熟悉 windows 进程,但它的 Popen 功能是跨平台的,应该优先使用 OS 特定的解决方案。

编辑:我认为您应该更喜欢 Subprocess 模块而不是 os.* OS 特定功能,它是跨平台的并且更 Pythonic(只需 google 即可)。您可以轻松地等待结果,并且干净地

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

【讨论】:

对不起,我的错。我确信子进程在这样使用时不会连接 STDIN/STDOUT。显然现在撤消我的投票为时已晚。【参考方案2】:

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

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

os.system("dir")

像从批处理文件中运行命令一样运行命令

【讨论】:

【参考方案3】:
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()

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

【讨论】:

【参考方案4】:

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>

【讨论】:

应该使用模块'subprocess'

以上是关于python 作为“批处理”脚本(即从 python 运行命令)的主要内容,如果未能解决你的问题,请参考以下文章

'PermissionError:[Errno 13]权限被拒绝',使用批处理文件运行python脚本后

将参数从批处理文件发送到 Python 脚本

将批处理文件输出管道传输到 Python 脚本

python 快速和肮脏的查克诺里斯python脚本。用于我们的SVN post commit钩子。如果您没有请求库:yum install pytho

如何从 z/OS 调用远程服务器上的 python 脚本?

《自拍教程34》段位一_Python批处理脚本