使用子进程在Windows上运行Python脚本
问题内容:
有没有一种简单的方法可以在Windows / Linux / OS X上运行Python脚本?
在后两者上subprocess.Popen("/the/script.py")
可以使用,但是在Windows上出现以下错误:
Traceback (most recent call last):
File "test_functional.py", line 91, in test_functional
log = tvnamerifiy(tmp)
File "test_functional.py", line 49, in tvnamerifiy
stdout = PIPE
File "C:\Python26\lib\subprocess.py", line 595, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
startupinfo)
WindowsError: [Error 193] %1 is not a valid Win32 application
monkut的
评论
:用例尚不清楚。为什么要使用子进程来运行python脚本?有什么阻止您导入脚本和调用必要功能的方法吗?
我正在编写一个快速脚本来测试Python命令行工具的整体功能(以在各种平台上对其进行测试)。基本上,它必须在temp文件夹中创建一堆文件,在此文件夹上运行脚本,并检查文件是否正确重命名。
我可以导入脚本并调用该函数,但是由于它依赖sys.argv
并使用sys.exit()
,所以我需要做类似的事情。
import sys
import tvnamer
sys.argv.append("-b", "/the/folder")
try:
tvnamer.main()
except BaseException, errormsg:
print type(errormsg)
另外,我想捕获stdout和stderr进行调试,以防万一出现问题。
当然,更好的方法是以更具单元可测试性的方式编写脚本,但是脚本基本上是“完成”的,在进行“
1.0”发布之前,我正在做最后一批测试(之后我要进行进行重写/重组,这将更加整齐并且更具可测试性)
基本上,找到sys.executable
变量后,将脚本作为一个进程简单运行会容易得多。我会以shell脚本的形式编写它,但那不是跨平台的。最终脚本可以在这里找到
问题答案:
刚刚找到sys.executable
-当前Python可执行文件的完整路径,可用于运行脚本(而不是依靠shbang,这显然在Windows上不起作用)
import sys
import subprocess
theproc = subprocess.Popen([sys.executable, "myscript.py"])
theproc.communicate()