python运行外部程序_在Python中运行外部程序(可执行文件)?
在Python中運行外部程序(可執行文件)?
我剛剛開始研究Python,我一直在嘗試從Python運行外部可執行文件。
我有一個用Fortran編寫的程序的可執行文件。 假設可執行文件的名稱是flow.exe。 我的可執行文件位于C:\Documents and Settings\flow_model.我嘗試了os.system和popen命令,但到目前為止我無法使其工作。 以下代碼似乎打開命令窗口,但它不會執行模型。
# Import system modules
import sys, string, os, arcgisscripting
os.system("C:/Documents and Settings/flow_model/flow.exe")
我怎樣才能解決這個問題?
Mesut asked 2019-06-11T19:42:19Z
14個解決方案
37 votes
如果使用Python 2.7或更高版本(特別是在Python 3.5之前),您可以使用以下內容:
import subprocess
subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])運行args描述的命令。 等待命令完成,然后返回returncode屬性。
subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])用參數運行命令。 等待命令完成。 如果返回碼為零則返回,否則引發CalledProcessError。 CalledProcessError對象將在returncode屬性中包含返回代碼
示例:subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])
在常規Python字符串中,\ U字符組合表示a?? 擴展的Unicode代碼點轉義。
以下是文檔的鏈接:[http://docs.python.org/3.2/library/subprocess.html]
對于Python 3.5+,您現在可以在許多情況下使用run():[https://docs.python.org/3.5/library/subprocess.html#subprocess.run]
Ida N answered 2019-06-11T19:43:45Z
35 votes
那些空格真的很麻煩:-(。嘗試.exe,然后是os.system,subprocess方法的相對路徑,或者其他......
如果盡力而為試圖繞過路徑中的空白障礙繼續失敗,那么我的下一個最佳建議是避免在關鍵路徑中出現空白。 難道你不能制作一個沒有空白的目錄,在那里復制關鍵的.exe文件,然后試試嗎? 這些破壞性破壞的空間對你的健康是絕對必要的嗎?
Alex Martelli answered 2019-06-11T19:42:40Z
19 votes
最簡單的方法是:
import os
os.startfile("C:\Documents and Settings\flow_model\flow.exe")
有用; 我嘗試過這個。
Someone answered 2019-06-11T19:44:12Z
18 votes
如果我是你,我會嘗試在你的路徑前插入一個'r'來表示它是一個原始字符串 - 然后你就不必使用正斜杠了。 例如:
os.system(r"C:\Documents and Settings\flow_model\flow.exe")
Jon Mills answered 2019-06-11T19:44:36Z
18 votes
你的用法是正確的。 我打賭你的外部程序flow.exe需要在其目錄中執行,因為它訪問存儲在那里的一些外部文件。
所以你可以試試:
import sys, string, os, arcgisscripting
os.chdir('c:\\documents and settings\\flow_model')
os.system('"C:\\Documents and Settings\\flow_model\\flow.exe"')
(注意單引號內的雙引號......)
Adrien Plisson answered 2019-06-11T19:45:14Z
8 votes
使用子進程,它是一個較小的模塊,因此它可以更快地運行.exe。
import subprocess
subprocess.Popen([r"U:\Year 8\kerbal space program\KSP.exe"])
Frodo Baggins answered 2019-06-11T19:45:39Z
6 votes
通過使用os.system:
import os
os.system(r'"C:/Documents and Settings/flow_model/flow.exe"')
romy answered 2019-06-11T19:46:04Z
3 votes
嘗試
import subprocess
subprocess.call(["C:/Documents and Settings/flow_model/flow.exe"])
int3 answered 2019-06-11T19:46:23Z
1 votes
這是否試圖執行subprocess.call()參數為"and", "Settings/flow_model/flow.exe"?
另外,您可以考慮subprocess.call()。
Thanatos answered 2019-06-11T19:46:55Z
1 votes
如果是我,我會將EXE文件放在根目錄(C :)中,看看它是否有效。 如果是這樣,它可能是目錄名中的(已經提到的)空格。 如果不是,則可能是某些環境變量。
另外,嘗試檢查stderr(使用int3的早期答案):
import subprocess
process = subprocess.Popen(["C:/Documents and Settings/flow_model/flow.exe"], \
stderr = subprocess.PIPE)
if process.stderr:
print process.stderr.readlines()
代碼可能不完全正確,因為我通常不使用Popen或Windows,但應該給出這個想法。 可能是錯誤消息在錯誤流上。
extraneon answered 2019-06-11T19:47:35Z
0 votes
這是正確的用法,但也許路徑名中的空格由于某種原因弄亂了。
您可能還希望在cmd.exe下運行該程序,以便可以看到flow.exe中可能指示錯誤的任何輸出。
Dan Olson answered 2019-06-11T19:48:07Z
0 votes
對于上述問題,此解決方案有效。
只需更改可執行文件所在的路徑即可。
import sys, string, os
os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')
os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\flowwork.exe)
'''import sys, string, os
os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')
os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\pdftopng.exe test1.pdf rootimage")'''
這里test1.pdf rootimage是我的代碼。
spurthi answered 2019-06-11T19:48:46Z
0 votes
import os
path = "C:/Documents and Settings/flow_model/"
os.chdir(path)
os.system("flow.exe")
John answered 2019-06-11T19:49:04Z
0 votes
有許多不同的解決方案,結果將強烈依賴于:
您正在使用的操作系統:Windows,Cygwin,Linux,MacOS
您正在使用的python版本:Python2或Python3x
因為我發現了一些聲稱僅在Windows中工作的東西,但是,可能是因為我碰巧使用Cygwin,這超出了操作系統處理Windows路徑的方式。 其他東西只適用于基于純* nix的操作系統或Python2或3。
以下是我的發現:
一般來說,explorer是最寬容的方法。
explorer是最不寬容的。 (僅限Windows,如果你很幸運,還有&&)
explorer不推薦
推薦的方式是explorer!
請記住,對任何事物使用explorer可能會帶來安全隱患。
試試這些:
import os, subprocess
...
winView = '/cygdrive/c/Windows/explorer.exe %s' % somefile
...
# chose one of these:
os.system(winView)
subprocess.Popen(['/cygdrive/c/Windows/explorer.exe', 'somefile.png'])
subprocess.run(winView, shell=True)
問:為什么要在Windows中使用explorer?
答:因為如果您只想查看某些新文件的結果,資源管理器將自動打開該文件,其中包含您為該文件類型設置的任何默認Windows程序。 因此無需重新指定要使用的默認程序。
not2qubit answered 2019-06-11T19:50:46Z
總結
以上是生活随笔為你收集整理的python运行外部程序_在Python中运行外部程序(可执行文件)?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3语法都相同吗_python
- 下一篇: 两个字符串组成tuple_史上最全pyt