2013-07-30 107 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

相關問題