創(chuàng)建 Python 腳本以在 Linux 中打開新終端并運(yùn)行命令 | 您所在的位置:網(wǎng)站首頁 › 星盤怎么看東西南北 › 創(chuàng)建 Python 腳本以在 Linux 中打開新終端并運(yùn)行命令 |
文章目錄
創(chuàng)建在 Linux 中打開新終端并運(yùn)行命令的 Python 腳本在 Linux 中創(chuàng)建 Python 腳本來檢查 Python 版本使打開的終端保持活動狀態(tài)并在其中運(yùn)行命令的 Python 腳本在 Linux 中使用 Python 子模塊 subprocess() 將命令傳遞到新終端總結(jié)
Linux 作系統(tǒng)以其程序員廣泛使用的多功能終端而聞名。 但在某些情況下,我們會發(fā)現(xiàn)自己重復(fù)編寫同一組語法,這可能既無聊又耗時。 你有沒有想過是否有一種方法可以在文件中預(yù)先編寫 Linux 命令,然后在終端中立即執(zhí)行? 是的! 你可以。 您可以在文件中編寫預(yù)先編寫的終端語法,并通過編寫 Python 腳本一次性執(zhí)行。 本文介紹了如何創(chuàng)建一個 Python 腳本來為我們打開一個新的終端并運(yùn)行一個命令。 創(chuàng)建在 Linux 中打開新終端并運(yùn)行命令的 Python 腳本在我們開始之前,讓我們修改一些基礎(chǔ)知識。 Python 腳本在命令行界面中通過定位文件然后運(yùn)行來執(zhí)行。 這些文件被執(zhí)行并顯示輸出。 有很多方法可以創(chuàng)建 Python 腳本來打開新終端并運(yùn)行命令。 第一個示例展示了如何創(chuàng)建一個 Python 腳本,該腳本通過 Linux 命令來檢查系統(tǒng)內(nèi)部的 Python 版本。 在 Linux 中創(chuàng)建 Python 腳本來檢查 Python 版本如果需要在終端直接寫命令查看Python版本,使用如下語法: python3 --version其中顯示系統(tǒng)內(nèi)部的 Python 版本,如下所示: jay@jay-virtual-machine:~$ python3 --version Python 3.10.6這是命令行語法,這意味著它只能在終端中編寫。 如果希望將其作為純文本寫入擴(kuò)展名為 .py 的文本文件(例如:test.py),則會導(dǎo)致錯誤。 python3 --version輸出: jay@jay-virtual-machine:~$ python3 test.py Traceback (most recent call last): File "/home/jay/test.py", line 1, in python3 --version NameError: name 'python3' is not defined必須創(chuàng)建一個 Python 腳本,使語法對 Python 編譯器和終端都有意義,才能解決這個問題。 要創(chuàng)建 Python 腳本以打開新終端并運(yùn)行命令,請創(chuàng)建一個擴(kuò)展名為 .py 的文本文件并編寫以下語法: import os My_Cmmnd="python3 --version" os.system("gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'")代碼有什么作用? 在第一行代碼中導(dǎo)入了 Python 模塊 os。 該模塊有助于將命令傳遞給作系統(tǒng)。需要執(zhí)行的命令行語法存儲在名為 My_Cmmnd 的變量中。 此示例中使用的語法檢查系統(tǒng)的 Python 版本。 My_Cmmnd="python3 --version" 第三行代碼向系統(tǒng)發(fā)送命令。 os.system("gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'")上面的代碼片段執(zhí)行以下作: os.system() 啟動子 shell 并執(zhí)行括號內(nèi)的命令。gnome-terminal 命令在 Linux 作系統(tǒng)中啟動一個新的 gnome-terminal。變量 My_Cmmnd 的內(nèi)容作為 Bash 命令發(fā)送到新終端執(zhí)行。該腳本執(zhí)行語法并顯示所需的輸出。 Python 3.10.6 jay@jay-virtual-machine:~$ 使打開的終端保持活動狀態(tài)并在其中運(yùn)行命令的 Python 腳本最后一個示例展示了如何創(chuàng)建一個 Python 腳本來打開一個新終端并通過將命令存儲在一個變量中來運(yùn)行命令。 另一方面,如果語法是單行命令,則可以直接輸入而不將其存儲在變量中。 創(chuàng)建一個擴(kuò)展名為 .py 的文件并編寫以下語法: import os os.system("gnome-terminal -e 'bash -c \"python3 --version\" '")上面的語法啟動一個新的終端并執(zhí)行命令。 但是使用此方法會在執(zhí)行命令后立即關(guān)閉終端。 解決此問題需要使用以下命令放置一個睡眠計時器: import os os.system("gnome-terminal -e 'bash -c \"python3 --version; sleep 5\" '")上述語法使新終端保持打開狀態(tài) 5 秒,但可以根據(jù)要求增加。 如果終端需要無限期保持活動狀態(tài),請使用以下語法。 import os os.system("gnome-terminal -e 'bash -c \"python3 --version; bash\" '")這使終端保持打開和活動狀態(tài),直到它被用戶關(guān)閉。 在 Linux 中使用 Python 子模塊 subprocess() 將命令傳遞到新終端我們學(xué)習(xí)了如何創(chuàng)建一個 Python 腳本來打開一個新終端并使用 Python 子模塊 os 運(yùn)行命令。 盡管不再推薦使用這個內(nèi)置庫將命令傳遞到終端。 這是因為 os 在較新版本的 Python 中已被棄用。 為避免安全風(fēng)險,必須改用Python子模塊subprocess。 要創(chuàng)建 Python 腳本以打開新終端并使用子進(jìn)程運(yùn)行命令,請創(chuàng)建一個與前面示例類似的擴(kuò)展名為 .py 的文件,并在其中寫入以下代碼: import subprocess My_Cmmnd = "ls" process = subprocess.Popen( "gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'", stdout=subprocess.PIPE, stderr=None, shell=True )UNIX 命令 ls 列出當(dāng)前目錄中的文件。 因此,如果運(yùn)行此命令,則會顯示當(dāng)前目錄中的文件列表。 首先導(dǎo)入 subprocess() 模塊; 然后,命令存儲在一個變量中。 在名為 process 的變量中,參數(shù)是為 subprocess() 定義的。 subprocess.Popen 構(gòu)造函數(shù)在讀取 gnome-terminal -e 語法時在新的 gnome-terminal 中啟動子進(jìn)程。 最后,Python 腳本打開一個新終端并運(yùn)行命令。 輸出: jay@jay-virtual-machine:~$ python3 test.py Desktop Downloads Pictures snap test2.py Videos Documents Music Public Templates test.py要了解 Linux shell 提供的一些其他功能,讓我們探索使用 subprocess() 將參數(shù)發(fā)送到 shell。 例如,下面程序中的命令 ls -la 會列出所有元數(shù)據(jù)和隱藏文件。 import subprocess My_Cmmnd = "ls -la" process = subprocess.Popen( "gnome-terminal -e 'bash -c \""+My_Cmmnd+";bash\"'", stdout=subprocess.PIPE, stderr=None, shell=True )輸出: 當(dāng)參數(shù)傳遞給 shell 時,此命令作為字符串執(zhí)行。 結(jié)果,shell 在開始執(zhí)行我們的 subprocess() 時將該字符串解釋為命令參數(shù)。 上述方法的一個缺點(diǎn)是,當(dāng)使用 shell=true 顯式調(diào)用 shell 時,它會將所有元字符(包括空格)傳遞給子進(jìn)程,這在 shell 注入事件中構(gòu)成威脅。 為避免這種情況,請改用 Python 列表。 使用列表時,要調(diào)用的命令位于列表的第 0 個索引處,其他參數(shù)緊隨其后。 將上一個示例中使用的命令調(diào)用為列表。 import subprocess subprocess.run(['ls', '-la'])輸出: 命令的結(jié)果也可以通過設(shè)置選項 capture_output=True 存儲在變量中。 import subprocess saved_results = subprocess.run(['ls', '-la'], capture_output=True) print(saved_results.stdout)輸出: 可以看到輸出顯示了想要的結(jié)果,但是沒有索引,文件名散亂。 發(fā)生這種情況是因為系統(tǒng)以字節(jié)為單位保存了 ls -la 命令的結(jié)果。 要獲取字符串形式的結(jié)果,請設(shè)置選項 text=True。 import subprocess saved_results = subprocess.run(['ls', '-la'], capture_output=True, text=True) print(saved_results.stdout)輸出: 本文介紹如何創(chuàng)建 Python 腳本以打開新終端并運(yùn)行命令。 閱讀本文的讀者將能夠創(chuàng)建一個 Python 腳本來打開一個新終端并在 Linux 中輕松運(yùn)行命令。 |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實(shí)驗室設(shè)備網(wǎng) 版權(quán)所有 |