題 如何直接從shell運行我的python程序?


我寫了一個劇本。當它啟動時,它不會停止,並且它不斷從Internet獲取數據。 我可以這樣稱呼它:

cd /User/Desktop/project/internetScanner/
python3 main.py start

但我想在目的地內直接從終端這樣稱呼它:

internetScanner start

我怎麼能這樣做?


9
2017-12-30 16:31


起源


我想知道這個標題是否可以改變.. - user606723
@ user606723隨意建議編輯以更改它。第一個標題“如何讓我的程序可以在shell上運行?”不是很好。 - slhck


答案:


您應該重命名您的文件 main.py 至 internetScanner。 * nix上的擴展名純粹是可選的。這應該沒關係。

mv main.py internetScanner

然後,將以下行添加到此文件中,就在開頭:

#!/usr/bin/env python3

這將確保當shell執行文件時,它將知道使用 python3 解釋內容。這被稱為 家當。現在,使文件可執行:

chmod +x internetScanner

您現在可以從內部運行程序 /User/Desktop/project/internetScanner/

./internetScanner start

您的程序將在前台運行並繼續運行,直到您按下 按Ctrl - C。如果您不想這樣,您也可以在後台啟動程序,方法是在命令後面添加一個&符號:

./internetScanner start &

這將讓您的程序運行,但您可以繼續使用您的shell。這稱為作業控制,有一個簡單的教程 這裡

如果您現在希望能夠從系統的任何位置運行該程序,則需要添加 internetScanner 你的目錄 PATH什麼是PATH和其他環境變量,以及如何設置或使用它們?


27
2017-12-30 16:35



好答案。我建議加他 威力 如果他不想等待和/或將其輸出和錯誤流重定向到文件,則希望用&符號(&)結束命令。 - Ben Hocking
@BenHocking謝謝,我把它添加到了答案中。 - slhck
X & 不會將進程與控制shell分離,它只對進程進行後台處理,這意味著如果該shell退出它將會發送給它的TERM信號;所以,如果你不想要你應該使用 分離, detach ./internetScanner start。 - Dan D.
@DanD。 … 要么 nohup, disown 要么 at等等。 如何完全從終端分離進程? - slhck
值得注意的是它仍然可以命名 main.py 只要它符號鏈接到 internetScanner $ PATH中的某個地方。 - jeremiahd


假設沒有其他文件 /User/Desktop/project/internetScanner/ 需要,如果你想為單個用戶安裝鏈接(ln -smain.py 至 $HOME/bin/internetScanner。你可能需要mkdir $HOME/bin 第一。

下次登錄時, $HOME/bin 可能會添加到您的PATH中。如果您希望所有用戶都可以使用它,請將其複製到 /usr/local/bin

如果必須執行 /User/Desktop/project/internetScanner/,要么通過導入開始 os 並打電話

os.chdir('/User/Desktop/project/internetScanner/') 

或者在中創建一個啟動器腳本 $HOME/bin 要么 /usr/local/bin 改變為 /User/Desktop/project/internetScanner/ 並執行腳本。


2
2018-01-10 05:41





alias internetScanner "python /User/Desktop/project/internetScanner/main.py" 在.aliases文件中(對於csh)。對於bash,放 alias internetScanner="python /User/Desktop/project/internetScanner/main.py" 在.bashrc中。之後,您可以從任何地方使用internetScanner啟動。


0
2017-11-10 01:39



我從來沒有聽說過 .aliases 文件。這對Bash來說是標準的嗎?或者你必須明確地在你的 .bashrc? - Kazark