2016-03-08 40 views
1

我開始學習Python,學習Python困難的方法,而且我正面臨着ex13的一些問題。我想現在如果這是我的錯誤或PyCharm的工作方式。使用PyCharm的腳本參數 - 學習Python的難點

基本上使腳本工作作爲鍛鍊暗示我看到我必須手動在PyCharm與運行中輸入參數的名稱>編輯配置

我把「第一」「第二」和「第三」

但我想結合raw_input和argv,所以我可以讓用戶選擇參數的名稱。這是我寫的:

from sys import argv 

first = raw_input("First argument: ") 
second = raw_input("Second argument: ") 
third = raw_input("Third argument: ") 

script, first, second, third = argv 

print "The script is called:", script 
print "Your first variable is:", first 
print "Your second variable is:", second 
print "Your third variable is:", third 

它運行但它返回:

ValueError: need more than 1 value to unpack 

看來,在PyCharm我必須手動輸入所有的腳本參數?沒有辦法將它與原始輸入結合起來?

感謝您的幫助。

+0

你能否澄清究竟是你期待結合?你想檢查是否提供了足夠的參數,如果沒有,提示他們? – idjaw

回答

3

note check out Joran's答案顯示了使用命令行參數和提示用戶輸入的良好組合。以下是正在發生的事情:

這是PyCharm中的預期行爲,用於指定您想讓PyCharm執行腳本的參數。認爲它像PyCharm做這樣的事情:

python my_script.py 

然而,PyCharm不知道要傳遞的參數,您需要提供這一點,所以它知道如何運行你的腳本。如果您看到PyCharm窗口的底部附近,則有一個Terminal選項卡。您可以使用它來快速執行腳本並提供參數。

其次,您得到錯誤的原因是因爲您在嘗試使用argv時未正確處理腳本輸入。

您正在使用raw_input進行混合,它會在您的Python腳本運行時接受用戶輸入,而不是argv,它會在運行時將參數引入Python腳本。

那麼,你在這裏實際做什麼,不是使用raw_input,而只是argv。這裏是一個小的演示,以澄清這一切:

from sys import argv 

script, first, second, third = argv 

print "The script is called:", script 
print "Your first variable is:", first 
print "Your second variable is:", second 
print "Your third variable is:", third 

現在進入到您的命令提示符下做到這一點:

python my_script one two three 

您將獲得:

The script is called: my_script.py 
Your first variable is: one 
Your second variable is: two 
Your third variable is: three 

這是一個非常簡單的例子,你可能需要添加一些處理你的輸入,否則你將會在腳本的不同輸入中出現很多錯誤。因此,我建議也許看看argparse而不是

+0

我想也許OP實際上是在詢問如何接受來自命令行的3個參數,但是如果他們不存在以提示他們...(雖然我不會在這種解釋上下注錢) –

+1

@JoranBeasley重讀這個問題,我可以看到你現在的意思。希望OP會加入並澄清。我會在他們的問題中平息他們。 – idjaw

+0

非常感謝!我不明白我應該使用終端。 –

2

林不知道我明白這個問題...但下面的代碼將使用命令行參數,如果有3個(或以上)......否則會提示並分割相同的方式shell把命令行參數

import shlex # shlex.split will split the string the same way that the shell would for command line args 

if len(sys.argv) < 3: 
    args = (list(sys.argv) + shlex.split(raw_input("Enter Args:")))[:3] 
else: 
    args = sys.argv[:3] 

print "Using Args:",args 
one,two,three = args 
+1

是的。這看起來像OP正在尋找的東西。我也會在我的回答中加上一個註釋以引用您的意見 – idjaw