![](/img/trans.png)
[英]In Python: how can I get the exit status of the previous process run from Bash (i.e. “$?”)?
[英]python as a “batch” script (i.e. run commands from python)
我在Windows环境(我的笔记本电脑!)工作,我需要一些运行其他程序的脚本,就像一个Windows批处理文件。
我如何从python运行命令,使程序运行时,将替换脚本? 该程序是交互式的(例如,同步)并保持打印行并始终要求用户输入。
因此,仅运行程序并打印输出是不够的。 程序必须接管脚本的输入/输出,非常类似于从.bat文件运行命令。
我试过os.execl,但它一直告诉我“无效的参数”,而且,它没有找到程序名称(不搜索PATH变量); 我必须给它完整的路径..?!
基本上,在批处理脚本中我可以写:unison profile
如何在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:\>
怎么绕过这个?
我发现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()
这应该可以帮助您入门。 如果您想要更详细的答案,请使用更多信息编辑您的问题!
os.execlp
应该工作。 这将搜索您的路径以获取该命令。 如果没有必要,不要给它任何args:
>>> 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.