Unix 是一種作業系統,由 Ken Thompson 和 Dennis Ritchie 於 1969 年左右在 AT&T 貝爾實驗室開發。我們可以使用許多有趣的 Unix 指令來執行不同的任務。問題是,我們可以直接在Python程式中使用這樣的指令嗎?這就是我將在本教程中向您展示的內容。
Unix指令ls
列出目錄中的所有檔案。如果您將 ls
原樣放入 Python 腳本中,則執行程式時將得到以下結果:
Traceback (most recent call last): File "test.py", line 1, in <module> ls NameError: name 'ls' is not defined
這表示Python解釋器將ls
視為變數並要求對其進行定義(即初始化),並且沒有將其視為Unix命令。
此問題的一個解決方案是使用 Python os 模組中的 os.system()
。
如同文件中所提到的,os.system()
:
#在子 shell 中執行指令(字串)。這是透過呼叫標準C函數system()來實現的,並且具有相同的限制。
因此我們可以在Python中執行ls
指令,如下所示:
import os os.system('ls')
這將傳回目前目錄中的檔案列表,這是 .py
程式所在的位置。我目前的目錄如下所示:
env unixfile.py workwithexcel
我們再舉一個例子。如果要傳回目前日期和時間,可以使用Unix指令date
,如下所示:
import os os.system('date')
就我而言,這就是我透過上述腳本得到的結果:
Thu 24 Apr 2022 10:42:41 AM EAT
儘管 os.system()
可以工作,但不建議使用,因為它被認為有點舊且已棄用。更好的解決方案是 Python 子進程模組中的 call(args)
函數。正如有關此功能的文檔中所提到的:
執行 args 描述的命令。等待指令完成,然後傳回 returncode 屬性。
如果我們想使用這種方法來執行 ls
Unix 指令,我們可以執行以下操作:
from subprocess import call call('ls')
讓我們看看如何使用 subprocess
模組傳回日期,但讓我們讓範例變得更有趣。
import subprocess time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, err = time.communicate() print('Todays date is ', output)
使用 check_output()
可以更簡單地執行上面的範例,如下所示:
import subprocess time = subprocess.check_output('date') print('Todays date is', time)
上述腳本的輸出是:
Todays date is b'Thu 24 Apr 2022 10:48:19 AM EAT\n'
上面的範例展示了使用不同的 subprocess
函數的靈活性,以及我們如何將結果傳遞給變數以進行進一步的操作。
正如我們在本教程中看到的,可以使用 subprocess
模組呼叫和執行 Unix 命令,該模組透過其不同的功能在使用 Unix 命令時提供了很大的靈活性。您可以在 Python 文件中了解有關此模組及其不同功能的更多資訊。
以上是在您的Python程式中執行Unix指令的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!