Pycharm 和 sys.argv 参数

问题描述 投票:0回答:13

我正在尝试调试一个将命令行参数作为输入的脚本。参数是同一目录中的文本文件。脚本从 sys.argv 列表中获取文件名。我的问题是我无法在 pycharm 中使用参数启动脚本。

我尝试在“运行”>“编辑配置”菜单中的“脚本参数”字段中输入参数,如下所示:

-s'file1.txt', -s'file2.txt'

但是没有成功。如何启动带参数的脚本?

附注我在Ubuntu上

python linux pycharm
13个回答
145
投票

在 PyCharm 中,参数像您一样添加到

Script Parameters
中,但是,它们用双引号括起来
""
,并且没有指定像
-s
这样的解释器标志。这些标志在
Interpreter options
框中指定。

脚本参数框内容:

"file1.txt" "file2.txt"

解释器标志:

-s

或者,视觉上:

然后,用一个简单的测试文件来评估:

if __name__ == "__main__":
    import sys
    print(sys.argv)

我们获取我们提供的参数(

sys.argv[0]
当然包含脚本名称):

['/Path/to/current/folder/test.py', 'file1.txt', 'file2.txt']

108
投票

为了其他想知道如何到达此窗口的人。方法如下:

您可以通过单击

Select Run/Debug Configurations
(位于 左侧)并转到
Edit Configurations
来访问此内容。 A 为了清晰起见,提供了 gif。


24
投票

在 PyCharm 上 社区版或专业版 2019.1+ :

  1. 从菜单栏中单击 运行 -> 编辑配置
  2. Parameters 文本框中添加您的参数(例如
    file2.txt file3.txt
    --myFlag myArg --anotherFlag mySecondArg
  3. 点击应用
  4. 点击确定

11
投票

除了 Jim 的回答(抱歉,没有足够的代表点来发表评论),只是想指出 PyCharm 中指定的参数not有特殊字符转义,这与您在命令行上所做的不同。所以,在命令行上你会这样做:

python mediadb.py  /media/paul/New\ Volume/Users/paul/Documents/spinmaster/\*.png

PyCharm 参数为:

"/media/paul/New Volume/Users/paul/Documents/spinmaster/*.png"

5
投票

请注意,由于某些未知原因,无法在 PyCharm Edu 版本中添加命令行参数。它只能在专业版和社区版中完成。


3
投票

将以下内容添加到 Python 文件的顶部。

import sys

sys.argv = [
    __file__,
    'arg1',
    'arg2'
]

现在,您只需右键单击 Python 脚本即可。


3
投票

第一个参数是要运行的脚本的名称。从第二个参数开始,它是您想要从命令行传递的参数。以下是测试脚本:

from sys import argv

script, first, second = argv
print "Script is ",script
print "first is ",first
print "second is ",second
from sys import argv

script, first, second = argv
print "Script is ",script
print "first is ",first
print "second is ",second

这是传递输入参数的方法: '脚本的路径','第一个参数','第二个参数'

假设脚本的路径是

/home/my_folder/test.py
,输出将如下所示:

Script is /home/my_folder/test.py
first is First Parameter
second is Second Parameter

我花了一些时间才弄清楚输入参数是用逗号分隔的。


1
投票

我相信它甚至包含在 Edu 版本中。只需右键单击实心绿色箭头按钮(运行)并选择“添加参数”即可。


1
投票

它适用于我的 edu 版本。我没有必要在解释器选项中指定 -s 选项。


0
投票

在 PyCharm 的编辑配置中,当您以字符串形式提供参数时,不应使用 '' (这些引号)来提供输入。

代替 -s'file1.txt',-s'file2.txt' 只需使用:

-s 文件1.txt, -s 文件2.txt


0
投票

您可以像

-argName"argValue"
一样使用
-d"rd-demo"
来添加Pycharm参数

 -d"rd-demo" -u"estate"
从 IDE 中选择

Parameters

 后,在 
edit Configuration
 部分中添加了
参数


0
投票

我正在使用 argparse,为了调试我的脚本,我还使用了编辑配置。例如,下面的脚本获取 3 个参数(Path、Set1、N)和一个可选参数(标志): str 类型的“Path”和“Set1”。 来自 int 类型的“N”。 布尔类型的可选参数“flag”。

impor argparse


parser = argparse.ArgumentParser(prog='main.py')
parser.add_argument("Path", metavar="path", type=str)
parser.add_argument("Set1", type=str, help="The dataset's name.")
parser.add_argument("N", type=int, help="Number of images.")
parser.add_argument("--flag", action='store_true')
params = parser.parse_args()

为了在调试中运行它或不使用命令行运行它,所需要的只是:

  1. 栏菜单运行-->编辑配置

  2. 为您的调试/运行脚本定义Name

  3. 设置参数部分。对于上面的示例,输入如下:

    必须包含默认的 3 个参数 --> "c:\mypath" "name" 50

    对于可选参数 --> "c:\mypath" "name" 50 "--flag"

parameter section


0
投票

Ahmed Saber 的上述解决方案对我有用。我正在使用 PyCharm CE 2023.2.1。 我怀疑 JetBrains 已经通过不同版本的 PyCharm 改变了这一点,因此我们遇到了困难。 如果发布这样的问题时包含所使用的版本号,那么这可能会很有用。 谢谢艾哈迈德。

© www.soinside.com 2019 - 2024. All rights reserved.