Python脚本,参数未传输到脚本

发布于 2021-01-29 15:05:36

我有一个名为“ gcc_opt.pyw”的Python脚本,并将其目录包含在Windows PATH环境变量中。

但是不会将单个命令行参数传递给脚本。打印出sys.argv会告诉我argv列表中只有文件名。

该命令:

gcc_opt HelloWorld.c -o HelloWorld.exe -shared

结果是

["C:\\Scripts\\gcc_opt.pyw"]

你能告诉我为什么没有其他论点吗?

我不知道它是否重要,但是我将python.exe设置为执行.pyw文件的默认程序,因为我看不到使用pythonw.exe的任何打印信息(为什么这样)。

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    无法获取参数的原因是因为您破坏了.py关联,因此可以双击这些文件以在NotePad ++中打开它们,然后破坏.pyw关联以执行.py应该做的事情。

    简而言之,您忘记%*为您的“自定义”(混杂).pyw关联在Python.exe命令行的末尾添加。

    ASSOC和FTYPE命令用于显示关联和文件类型,即运行什么程序来处理具有特定扩展名的文件。这些命令在我的系统上产生的是:

    C:\test>assoc .py
    .py=Python.File
    
    C:\test>assoc .pyw
    .pyw=Python.NoConFile
    
    C:\test>ftype python.file
    python.file="C:\Python27\python.exe" "%1" %*
    
    C:\test>ftype python.noconfile
    python.noconfile="C:\Python27\pythonw.exe" "%1" %*
    

    普通的.py关联通过控制台窗口运行python.exe,以便您可以查看打印语句的输出。

    普通的.pyw关联在没有控制台窗口的情况下运行pythonw.exe。

    您可以在每个命令行的末尾看到一个%*。这就是将参数发送到命令的原因。(实际上,它%1是第一个参数,%* 表示“所有其余参数”。)

    当您尝试在命令行中运行python文件而不输入扩展名或初始的“ python”命令时,会发生一些事情。

    首先,使用PATHEXT环境变量来查找匹配的扩展名。在您的情况下,它会发现您的命令名“ gcc_opt” + .PYW会生成匹配的文件。

    然后,查找.PYW文件的关联,找到文件类型Python.NoConFile,在您的情况下,该文件类型设置为“
    python.exe”(假定为pythonw.exe)。(您可以在注册表中的HKEY_CLASSES_ROOT下看到它们。)

    然后,系统会根据为该文件类型找到的命令模板创建实际的命令行,在您的情况下,这可能是

    "[your-python-path]python.exe" "%1"
    

    这告诉它仅使用第一个参数,即python脚本名称“ gcc_opt.pyw”。

    快速解决方案是在%*该命令的末尾添加。

    正确的修复方法是将内容放回正确的关联并以更标准的方法打开Python文件进行编辑(将图标拖放到NotePad 上,或者右键单击并使用NotePad

    编辑)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看