2011-07-15 63 views
0

爲了說明問題,我正在編寫的Python模塊是一個自寫的.py文件(名稱爲轉換器),而不是標準的Python庫。如何在僅使用Windows命令行的Python模塊中運行函數?

不管怎麼說,我想以某種方式超載我的功能,使得

converter file_name 

鍵入將文件的名稱發送到

def converter(file_name): 
    # do something 

我已經通過谷歌和StackOverflow上被廣泛搜索,但能找不到需要使用特殊字符(如$)或命令行選項(如-c)的任何內容。有誰知道如何做到這一點?

回答

2

您可以使用類似PyInstaller的東西來創建一個exe文件的py文件。

要使用該參數在Python:

import sys 

if __name__ == "__main__": 
    converter(sys.argv[1]) 
+0

我的意思是本地Windows命令行,而不是Python的交互式解釋器。 – Edwin

+0

哎呀,應該先閱讀以下內容。 – Edwin

+0

是的,在你創建一個exe後,你可以像你在你的問題中所說的那樣使用它。 – Jacob

1

您可以在Windows類型的shell:

python converter.py file_name.txt 

給的參數蟒蛇內sys.argv列表。所以訪問它們:在您要運行該文件的底部

import sys 
sys.argv[0] # this will be converter.py 
sys.argv[1] # this will be file_name.txt 

,添加:

if __name__ == "__main__": 
    converter(sys.argv[1]) 

有第二個參數:

python converter.py file_name1.txt file_name2.txt 

這將得到結果:

import sys 
sys.argv[0] # this will be converter.py 
sys.argv[1] # this will be file_name1.txt 
sys.argv[2] # this will be file_name2.txt 

如果您正在執行許多複雜的命令行選項,我會推薦使用類似the builtin argparse(用於2.7/3.2 +)或argparse on pypi(用於2.3+)的內容。

+0

如果converter()方法需要兩個文件名,第二個文件是可選的呢?那麼情景應該是什麼? – khan

+0

已更新的答案。希望它有幫助。 – TorelTwiddler

+0

運行時出現此錯誤:Traceback(最近一次調用的最後一次): sys.argv [1]#這將是file_name1文件「C:\ Users \ HP \ Desktop \ program.py」,第12行,在中。 txt IndexError:列表索引超出範圍 – khan

0

我能想到的唯一的辦法就是創建一個同名的批處理文件,並在其中,調用所提供的參數,你的Python腳本。

使用批處理文件時,您不必指定擴展名(.bat),以使您更接近您想要的位置。

0

另外,沒有任何編譯.py來。 exe,你可以使你的腳本'可執行',這樣如果你發出命令行如myscript param param,系統將搜索myscript.py併爲你運行,就好像它是一個.exe.bat文件。

爲了實現這一點,配置在計劃運行腳本的機器:

  1. 確保您擁有文件關聯設置(.py到Python解釋,那就是,如果你雙擊在你的腳本資源管理器 - 它被執行)。通常這是由Python安裝程序配置的。
  2. 編輯COMSPEC環境變量(往裏屬性),包括.PY擴展以及.EXE.COM
  3. 開始使用變量的新價值新cmd.exeStart菜單。任何程序的舊實例只會看到舊值。

如果您在同一臺計算機上運行多個腳本,並且如果將腳本傳播到多臺計算機上,則此設置可能非常方便。在後一種情況下,您最好使用py2exe轉換器將您的應用程序捆綁爲一個自給自足的包(即使安裝了python也不需要)。

相關問題