2011-12-25 144 views
2

我有一個包含以下命令bat.bat文件失敗:「setup.py構建」
Python中,使用os.system當腳本不相同的文件夾

我有使用執行該蝙蝠命令的腳本:
os.system('E:/bla/FPtest/retryURL/Temp_installed/bat.bat'

如果我從與bat.bat相同的文件夾運行腳本......它完美地工作。

如果我在任何其他文件夾中運行它,會返回以下錯誤。

**'setup.py'** is not recognized as an internal or external command, operable program or batch file. 

我也曾嘗試subprocess.Popen返回相同的結果它包括這個頂部:C:\Eclipse\Workspace\example>setup.py build ... ... MMMMMM

UPDATE:

我已經決定在保存bat.bat文件的同一目錄中運行 os.system命令(這也是setup.py的存儲目錄)

現在呼叫應該如此簡單。

import os 
os.system('bat.bat')  note: (run from pydev) 

結果:

E:\App\FPtest\retryURL\Temp_installed>setup.py build 
Traceback (most recent call last): 
    File "C:\Python31\lib\site.py", line 56, in <module> 
    import os 
    File "C:\Python31\lib\os.py", line 380, in <module> 
    from _abcoll import MutableMapping # Can't use collections (bootstrap) 
    File "C:\Python31\lib\_abcoll.py", line 49 
    class Hashable(metaclass=ABCMeta): 
          ^
SyntaxError: invalid syntax 

附加說明:

如果我運行任何 '簡單' 的bat文件,一切工作正常。如果我在解釋器之外運行.bat文件,它也可以正常工作......這導致我相信它是引起問題的.bat文件的內容:setup.py build
在這種情況下.bat文件的內容執行一個命令cx_freeze冷凍和exe文件,但上面的錯誤是返回什麼,當我嘗試這個

UPDATE:

似乎運行「OS .system('bat.bat')或等效的子進程如果從標準python解釋器運行,則成功執行.bat文件。所以它只是不成功,如果從Pydev運行

+0

'setup.py'在哪裏?你需要a)在你的'bat.bat'中放置'setup.py'的完整路徑,或者b)將包含'setup.py'的文件夾添加到你的PATH變量中(在Linux中:export PATH = $ PATH: /路徑/到/文件夾/含有/ setuppy')。 – 2011-12-25 07:47:25

+0

這似乎是一場真正的災難雞尾酒。我試圖從pydev運行一個bat文件。它正常工作。但我想讓bat文件執行一個cx_freeze來凍結另一個程序。我已經做了一個工作,並繼續通過上述錯誤,但已掛上另一個我將在上面添加 – Rhys 2011-12-25 08:58:32

+0

我有一個與Mac OS X上Pydev非常類似的問題 - 一個exernal命令在Python解釋器中運行良好終端,但不在Pydev。我非常有興趣瞭解發生了什麼問題以及如何解決問題。 – acjay 2012-01-09 15:43:54

回答

0

我創建了一個工作,這實際上比我原來的問題更實際和更高效。直到解決原來的問題

而不是使用一個.bat文件...配售.bat文件的內容的.py子裏面我會接受這個答案的作品

進口子
subprocess.Popen( 'python -E setup.py build')

0

它看起來像你的路徑變量不包括任何命令。嘗試向PATH環境變量添加兩個腳本所在的目錄。

在Windows中,通過右鍵單擊我的電腦 - >屬性 - >高級(Windows 7中的左窗格) - >環境變量來完成此操作。只需要在前面粘貼路徑並確保有一個路徑就比較容易。在您的條目和路徑變量的開頭之間,因爲它是....不要刪除其中的內容。

+0

謝謝,我開始變得有點困惑'更容易只是堅持'不是你的錯我不熟悉這個 - 對不起 – Rhys 2011-12-25 09:32:52

3

在Windows 2000及更高版本中,.py擴展名與運行解釋程序的打開命令關聯。這實際上是在安裝期間完成的。但爲了通過解釋器運行python腳本,腳本應該位於當前目錄中,或者應該位於路徑環境變量中連接的其中一個目錄中。

在你的情況,如果setyp.py存在於存在於一些和路徑是絕對的,你可以做以下

path=%path%;<directory containing setup.py> 

在另一方面,如果setup.py是在從相對目錄你批處理文件不是絕對路徑。您需要指定當前批處理文件位置的完整相對路徑。像

..\<sub directory>\setyp.py #If the script is below the current path 

.\<sup directory>\setyp.py #If the script is above the current path 

注意什麼***您也可以運行該腳本沒有擴展名(不推薦)如果.py出現在PATHEXT環境變量。

+0

setup.py不是從解釋器執行,我也不想要它。 .bat文件正在解釋器中執行。 setup.py是cx_freeze命令的一部分(位於.bat文件的內部),用於喚起cx_freeze凍結exe文件。我也更新了原文。謝謝 – Rhys 2011-12-25 09:24:52

+0

現在你提到它,導致我的新錯誤的第一行是'E:\ Deepthroat \ FPtest \ retryURL \ Temp_installed> setup.py build'...不應該讀'E:\ App \ FPtest \ retryURL \ Temp_installed> bat.bat'.bat文件應該從解釋器 – Rhys 2011-12-25 09:37:50

+0

@Rhys執行,實際上你正在尋找錯誤的地方。當您運行批處理文件並且嘗試調用「setup.py」而不使用python解釋器作爲前綴時,Bat文件得到正確執行,Windows會嘗試查找「py」與任何打開命令的關聯。這是它嘗試搜索setup.py的地方,它無法找到它。 – Abhijit 2011-12-25 10:14:18

相關問題