一尘不染

使用子进程在Windows上运行Python脚本

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变量后,将脚本作为一个进程简单运行会容易得多。


阅读 165

收藏
2020-12-20

共1个答案

一尘不染

刚刚找到sys.executable-当前Python可执行文件的完整路径,可用于运行脚本(而不是依赖shbang,这显然在Windows上不起作用)

import sys
import subprocess

theproc = subprocess.Popen([sys.executable, "myscript.py"])
theproc.communicate()
2020-12-20