有没有一种简单的方法可以在Windows / Linux / OS X上运行Python脚本?
在后两者上subprocess.Popen("/the/script.py")可以使用,但是在Windows上出现以下错误:
subprocess.Popen("/the/script.py")
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变量后,将脚本作为一个进程简单运行会容易得多。
刚刚找到sys.executable-当前Python可执行文件的完整路径,可用于运行脚本(而不是依赖shbang,这显然在Windows上不起作用)
sys.executable-
import sys import subprocess theproc = subprocess.Popen([sys.executable, "myscript.py"]) theproc.communicate()