【发布时间】:2010-10-29 02:37:21
【问题描述】:
有没有在 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'scomment:用例不清楚。为什么要使用 subprocess 来运行 python 脚本?是否有什么东西阻止您导入脚本并调用必要的函数?
我正在编写一个快速脚本来测试 Python 命令行工具的整体功能(在各种平台上进行测试)。基本上它必须在一个临时文件夹中创建一堆文件,在这个文件夹上运行脚本并检查文件是否正确重命名。
我本可以导入脚本并调用函数,但由于它依赖于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 脚本,但这不会是跨平台的。最终脚本可以找到here
【问题讨论】:
-
用例不清楚。为什么要使用 subprocess 来运行 python 脚本?是否有什么东西阻止您导入脚本并调用必要的函数?
-
从 python 运行 nodejs 模块时遇到了同样的问题。 subprocess.call([r'..\nodejs\npm'], shell=True) 解决了这个问题。
标签: python windows subprocess