簡體   English   中英

從python執行shell命令

[英]Executing shell command from python

我正在嘗試編譯一組行並執行它們並將輸出附加到文本文件。 我沒有寫同樣的東西,而是使用python腳本在后台編譯和執行。

import subprocess
subprocess.call(["ifort","-openmp","mod1.f90","mod2.f90","pgm.f90","-o","op.o"])
subprocess.call(["nohup","./op.o",">","myout.txt","&"])

程序pgm.f90正在使用ifort編譯器進行編譯,但是輸出沒有附加到myout.txt 相反,它將輸出附加到nohup.out ,即使在python腳本中指定"&"后,程序也不在后台運行。

我在這里犯了什么明顯的錯誤?

提前致謝

您可以通過使用帶有參數shell=True Popen()來調用子進程,就好像您在shell中一樣:

subprocess.Popen("nohup ./op.o > myout.txt &", shell=True)

這個問題是當你提供參數作為元素列表時,子進程庫繞過shell並使用exec系統調用來直接運行你的程序(在你的情況下,“nohup”)。 因此,不是shell解釋“>”和“&”運算符來重定向輸出並在后台運行,它們作為文字參數傳遞給nohup命令。

你可以告訴subprocess通過shell執行你的命令,但是這會啟動一個額外的shell實例並且可能會浪費。 要解決此問題,請使用子進程中的內置重定向功能,而不是使用shell原語:

p = subprocess.Popen(['nohup', "./op.o"],
                     stdout=open('myout.txt', 'w'))
# process is now running in the background.
# if you want to wait for it to finish, use:
p.wait()
# or investigate p.poll() if you want to check to see if
# your process is still running.

有關更多信息,請訪問: http//docs.python.org/2/library/subprocess.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM