从另一个脚本调用python脚本

时间:2013-07-30 15:10:16

标签: python

我试图让简单的python脚本调用另一个脚本,只是为了更好地理解它是如何工作的。 'main'代码如下:

#!/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

显然有些不对劲,但作为初学者却看不到什么。

3 个答案:

答案 0 :(得分:3)

你需要给它你想要调用的脚本的完整路径,如果你想动态地(并且你在同一个目录中),你可以这样做:

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

答案 1 :(得分: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')

答案 2 :(得分:0)

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

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