我在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:\>
怎么绕过这个?
您应该使用子进程模块创建一个新进程.
我不熟悉windows进程,但它的Popen功能是跨平台的,应该优先考虑OS特定的解决方案.
编辑:我认为你应该更喜欢Subprocess模块到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")
运行该命令就像从批处理文件中运行一样