从另一个脚本中调用Python脚本

3

我正在尝试编写一个简单的Python脚本来调用另一个脚本,只是为了更好地理解它的工作原理。主要代码如下:

#!/usr/bin/python
import subprocess
subprocess.call('kvadrat.py')

并且它所调用的脚本 - kvadrat.py:

#!/usr/bin/python
def kvadriranje(x):
    kvadrat = x * x
    return kvadrat

print kvadriranje(5)

这个脚本单独运行没有问题,但是当通过“main”脚本调用时会出现错误:

Traceback (most recent call last):
  File "/Users/user/Desktop/Python/General Test.py", line 5, in <module>
    subprocess.call('kvadrat.py')
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 444, in call
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 595, in __init__
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 1106, in _execute_child
OSError: [Errno 2] No such file or directory

显然出了些问题,但作为初学者不知道具体是什么。

可能是重复的问题:使用Python subprocess调用另一个Python脚本 - mmmmmm
这两个源文件都在同一目录下吗?看起来错误是说找不到“kvadrat.py”。 - vik
我相信你需要在调用时添加Python,除非Python是默认打开.py文件的程序。 - sihrc
它们都在同一个目录中。即使我将Python添加到调用中,仍会出现相同的错误。 - Fora Mejl
3个回答

3

如果您想动态调用脚本(并且在同一目录中),则需要为其提供完整的脚本路径,您可以这样做:

import os    
full_path = os.path.abspath('kvadrat.py')

3
你尝试过这个吗:
from subprocess import call
call(["python","kvadrat.py"]) #if in same directory, else get abs path

你还应该检查你的文件是否存在:

import os
print os.path.exists('kvadrat.py')

尝试了这个,也有效。但为什么这个有效而 subprocess.call 不行呢?它们不应该是做同样的事情吗?文件在同一目录下,也有可执行权限。 - Fora Mejl
实际上,这是我在Mac OS X 10.10上唯一有效的解决方案。 - lenhhoxung

0

Subprocess.call要求文件可执行并在路径中找到。在Unix系统中,您可以尝试使用subprocess.call(['./kvadrat.py'])来执行当前工作目录中的kvadrat.py文件,并确保kvadrat.py具有可执行权限;或者您可以将其复制到您的PATH中的目录,例如/usr/local/bin-然后它可以从任何地方执行。

大多数情况下,您不想使用子进程运行其他Python应用程序,而是将它们作为模块导入,但是......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接