2013-08-28 68 views
0

我得到了一個腳本,應該花費時間來執行python -script。爲了簡單起見,我只提供了我想在命令行中作爲參數執行的實際命令。Python參數在<從命令行讀取時削減了

說我叫:

python time.py python ratatosk.py < input.txt 

這裏python time.py後一切實際的命令我想執行。

然而,讀sys.argv這個時候:

print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

它只返回:

Number of arguments: 3 arguments. 
Argument List: ['time.py', 'python', 'ratatosk.py'] 

在哪裏的爭論休息去了?它看起來像<以某種方式剝離它。

我在MacBook Pro上運行Python Python 2.7.3(v2.7.3:70274d53c1dd,Apr 9 2012,20:52:43)。

+0

「<」字符在操作系統級別具有特殊含義,並在參數傳遞給程序之前進行解釋。最好選擇其他的參數。 – BartoszKP

+0

我建議你做'''或'<='這樣的事情,只是爲了逃避'cmd'解釋器。 – enginefree

回答

0

您需要轉義<符號。 嘗試調用:

python time.py python ratatosk.py \< input.txt 

它可能是更好地使用不同的字符比<使運行此命令很容易

0

您遇到shell redirection

<字符具有特殊意義的貝殼。它會導致被調用的程序從任何後面讀取,而不是默認的stdin(通常是鍵盤)。

Python只關心從stdin讀取,無論來自哪裏。它不應該出現在sys.argv

在您的示例中,input.txt很可能會替代用戶將數據輸入到您的程序並且您的使用是正確的。

下面是一個簡單的例子:

echo.py

text = raw_input() 
print text 

input.txt中

hello from the file 

示例運行

$ python echo.py 
hello from the keyboard 
hello from the keyboard 
$ python echo.py < input.txt 
hello from the file 
0

當涉及到UNIX Shell時,符號'<'被認爲是重定向。這意味着標準輸入將來自磁盤上的文件input.txt。

由於符號是特殊的,因此shell會轉換指定的命令,到達內核的是一個修改的命令,該命令不包含'<'。

您可以通過在\之前加\來避開'<',這樣它就不會作爲shell的特殊字符出現,並最終作爲系統參數傳遞給您的程序。