Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PyCharm编写脚本参数-艰苦学习Python_Python_Pycharm - Fatal编程技术网

使用PyCharm编写脚本参数-艰苦学习Python

使用PyCharm编写脚本参数-艰苦学习Python,python,pycharm,Python,Pycharm,我是通过艰苦地学习Python开始学习Python的,我在ex13中遇到了一些问题。我现在想知道这是我的错误还是因为PyCharm的工作方式 基本上,为了使脚本按照练习所建议的那样工作,我必须使用run>edit配置在PyCharm中手动输入参数名称 我把“第一”、“第二”和“第三” 但是我想结合原始输入和argv,以便让用户选择参数的名称。以下是我写的: from sys import argv first = raw_input("First argument: ") second = r

我是通过艰苦地学习Python开始学习Python的,我在ex13中遇到了一些问题。我现在想知道这是我的错误还是因为PyCharm的工作方式

基本上,为了使脚本按照练习所建议的那样工作,我必须使用run>edit配置在PyCharm中手动输入参数名称

我把“第一”、“第二”和“第三”

但是我想结合原始输入和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中,我似乎必须手动输入所有脚本参数?没有办法把它和原始输入结合起来

感谢您的帮助。

注意查看答案,它显示了使用命令行参数和提示用户输入的良好组合。下面是正在发生的事情的分解:

这是PyCharm中的预期行为,用于指定PyCharm执行脚本时使用的参数。想象一下PyCharm做了这样的事情:

python my_script.py
但是,PyCharm不知道要传递的参数,您需要提供这些参数,因此它知道如何运行脚本。如果您查看PyCharm窗口底部附近的位置,就会看到一个
终端
选项卡。您可以使用它来快速执行脚本并提供参数

其次,出现错误的原因是在尝试使用
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
这是一个非常简化的示例,您可能需要添加一些输入处理,或者您将在脚本的不同输入中遇到许多错误。有了这些,我建议您改为查看“检查答案”,它显示了使用命令行参数和提示用户输入的良好组合。下面是正在发生的事情的分解:

这是PyCharm中的预期行为,用于指定PyCharm执行脚本时使用的参数。想象一下PyCharm做了这样的事情:

python my_script.py
但是,PyCharm不知道要传递的参数,您需要提供这些参数,因此它知道如何运行脚本。如果您查看PyCharm窗口底部附近的位置,就会看到一个
终端
选项卡。您可以使用它来快速执行脚本并提供参数

其次,出现错误的原因是在尝试使用
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

这是一个非常简化的示例,您可能需要添加一些输入处理,或者您将在脚本的不同输入中遇到许多错误。有了这些,我建议你还是看看吧。我不确定我是否理解这个问题。。。但是如果有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
import-shlex#shlex.split将以与shell对命令行参数相同的方式拆分字符串
如果len(sys.argv)<3:
args=(list(sys.argv)+shlex.split(原始输入(“输入args:”)))[:3]
其他:
args=sys.argv[:3]
打印“使用参数:”,参数
一、二、三=args

我不确定我是否理解这个问题。。。但是如果有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
import-shlex#shlex.split将以与shell对命令行参数相同的方式拆分字符串
如果len(sys.argv)<3:
args=(list(sys.argv)+shlex.split(原始输入(“输入args:”)))[:3]
其他:
args=sys.argv[:3]
打印“使用参数:”,参数
一、二、三=args

我认为OP实际上可能在询问如何从命令行接受3个参数,但如果它们不存在,则提示输入它们。。。(尽管我不会把钱押在这个解释上)@JoranBeasley重读这个问题,我现在明白你的意思了。希望OP能插话澄清。我会回答他们的问题。非常感谢!我不明白我应该使用终端。我想OP实际上是在问如何从命令行接受3个参数,但如果它们不存在,则提示输入它们。。。(尽管我不会把钱押在这个解释上)@JoranBeasley重读这个问题,我现在明白你的意思了。希望OP能插话澄清。我会回答他们的问题。非常感谢!我不知道我应该用终端。是的。这看起来像OP要找的。我也会在我的答案中写一条说明,以供参考。这看起来像OP要找的。我也会在我的答案中写一条注释,以参考您的答案。您可以澄清一下,您希望如何结合?您是否希望检查是否提供了足够的参数,如果没有,则提示输入这些参数?您能否澄清您希望如何合并这些参数?是否要检查是否提供了足够的参数