使用Python子进程调用调用Python脚本

2024-04-28 21:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python脚本,它需要调用同一目录中的另一个Python脚本。我做到了:

from subprocess import call
call('somescript.py')

我得到以下错误:

call('somescript.py')
File "/usr/lib/python2.6/subprocess.py", line 480, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child

raise child_exception
OSError: [Errno 2] No such file or directory

不过,我把脚本somescript.py放在同一个文件夹中。我是不是丢了什么东西?


Tags: infrompyimport目录脚本childlib
3条回答

看看这个。

from subprocess import call 
with open('directory_of_logfile/logfile.txt', 'w') as f:
   call(['python', 'directory_of_called_python_file/called_python_file.py'], stdout=f)

如果“somescript.py”不是通常可以直接从命令行执行的命令(即$: somescript.pyworks),则不能使用call直接调用它。

请记住,Popen的工作方式是,第一个参数是它执行的程序,其余的是传递给该程序的参数。在这种情况下,程序实际上是python,而不是脚本。因此,以下操作将如您所料:

subprocess.call(['python', 'somescript.py', somescript_arg1, somescript_val1,...]).

这将正确调用Python解释器,并告诉它使用给定的参数执行脚本。

请注意,这与上述建议不同:

subprocess.call(['python somescript.py'])

这将尝试执行名为python somscript.py的程序,该程序显然不存在。

call('python somescript.py', shell=True)

也会起作用,但使用字符串作为输入来调用不是跨平台的,如果不是您构建字符串的人,则会很危险,并且通常应尽可能避免。

窗户?Unix系统?

Unix需要shebang和exec属性才能工作:

#!/usr/bin/env python

作为脚本的第一行,并且:

chmod u+x script.py

在命令行或

call('python script.py'.split())

如前所述。

如果将shell=True parameter添加到“call”调用中,Windows应该可以工作。

相关问题 更多 >