2013-07-30 36 views
3

我试图让简单的python脚本调用另一个脚本,只是为了更好地了解它是如何工作的。 “主”的代码是这样的:从另一个脚本调用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) 

调用脚本适用于自己的,而是通过调用时出现“主”脚本错误:

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 

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

+0

[使用Python子要进行的调用python脚本(可能重复http://stackoverflow.com/questions/7152340/using-python-subprocess-call-to-invoke- PY thon-script) – Mark

+0

都是同一个目录下的源文件?看起来像错误是说它找不到'kvadrat.py' – vik

+0

我相信你需要添加python到你的调用,除非python是你打开.py文件的默认值 – sihrc

回答

3

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

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

谢谢,这工作。 –

0

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

大多数时候,你不想使用的子进程来运行其它Python应用程序,但实际上只是进口成模块,但是时间......

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') 
+0

试过这个,也有效。但为什么这个工程和subprocess.call不?这不是假设要做同样的事情吗?文件位于相同的目录中并具有exe权限。 –

+0

实际上,这是Mac OS X 10.10上唯一适用于我的解决方案 – lenhhoxung