2015-09-28 136 views
4

我已經閱讀了大量的教程和stackex問題/答案,但顯然我的問題太具體,我的知識太侷限於拼湊解決方案。如何使用shell腳本(和makefile?)執行python程序

[編輯]我的困惑主要是由於我的項目需要一個shell腳本和一個makefile才能運行一個簡單的python程序。我不確定爲什麼這是必要的,因爲它看起來像是一個迂迴的做事方式。它看起來像makefile和腳本可能只是在那裏讓autograder感到高興,正如下面那些受訪者提到的那樣。那麼,我想這是與教授最好澄清的事情。我非常感謝答案 - 非常感謝您的幫助!

基本上,我想要做的就是通過program.sh(shell腳本)來運行program.py(我的源代碼),這樣,當我鍵入以下命令行

./program.sh arg1 

運行program.py和通過arg1到程序如同我已經手動鍵入以下到命令行

$ python program.py arg1 

我還需要自動設定program.sh可執行,因此$ chmod +x program.sh不必事先鍵入。

我讀過的解決方案提出here,這是非常有益的,但這似乎需要將文件與.py延期執行,而我的具體應用要求.sh擴展,從而爲上述需要運行。

爲什麼我要運行.sh文件的另一個原因是我還需要以某種方式包含makefile以運行程序以及腳本(所以我假設我必須包含一個make命令在腳本?)。

老實說,我不確定爲什麼makefile是python程序所必需的,但我們被prof指示makefile對於分級腳本來說更簡單,我們應該簡單地爲makefile內容:

all: 
    /bin/true 

非常感謝您對此事的幫助!

回答

4

你可以寫你的shell腳本來調用Python腳本:

$ python your_program.py $1 

,如果你只需要一個參數傳遞給你的python腳本,假設有不會是這樣的說法空間。

如果你需要一個makefile,你可以讓你的shell腳本可執行。

考慮到makefile是爲了方便分級腳本,我懷疑你需要添加一個調用它到你的腳本,但我會檢查。可能是什麼等級的腳本所做的是:

$ make 
$ ./your_script.sh 
+0

黨!儘管問題如此複雜,但我可以理解我的困惑點!這絕對有助於我理解具有.sh和makefile的點。是的,我會檢查教授確定,但至少現在我可以進行更專注的查詢。再次感謝! – e04

3

你不能設置一些不運行東西爲可執行;因爲一旦足夠了,你可以手動完成。 (這就是我們所有的人都與沒有自動生成的文件做。)

您可以通過兩種方式執行Python程序(和同樣適用於任何其他的解釋型語言):

1)運行解釋明確:python program1.py arg1,它會發現默認的Python解釋器(通常爲/usr/bin/python),並告訴它用「hashbang」神奇評論運行腳本

2)前綴的腳本,使腳本可執行:如果你把在第一行#!/usr/bin/python並執行chmod a+x program1.py(讓program1.py可執行給大家),然後每次你的typ電子郵件./program.py arg1,它將如您運行/usr/bin/python program1.py args1。正如我之前所說的,你只需要做一次chmod

您可以同時在shell腳本和Makefiles中同時使用這兩種樣式;不需要單獨的sh文件。


此外,您被指示沒有任何意義的Makefile,因爲它什麼都不做。這可能是你的教授打算用他自己的替代,或者可能有其他解釋,但all: /bin/true自己沒有意義。


如果你真的想有一個shell腳本,將其所有的參數傳遞給一個Python腳本,那就是:

#!/bin/sh 

python program1.py "[email protected]" 
+0

「另外,你被指示的Makefile沒有任何意義,因爲它什麼都不做。」這聽起來像是教授的自動平地機硬編碼首先運行「make」。這只是一個解決方法,讓分級人員高興。 –

+0

@JohnKugelman是的,你的想法是正確的。由於分級腳本的編寫方式,我們被告知假冒makefile會比沒有makefile更方便。 – e04

+0

@Amadan非常感謝您花時間回答!我知道如何直接從解釋器運行python文件,以及如何使用shebang運行它們(因爲我總是通常選擇這兩個選項中的一個來運行我的代碼)。但我的問題是,我將如何運行帶有單獨的shell腳本和僞造的makefile文件的python文件,因爲我以前從未這樣做過,它看起來有點奇怪。回想起來,我當然可以更清楚地說明這一點,所以非常感謝您花時間幫助! – e04