当前位置: 首页 > 面试题库 >

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

章承基
2023-03-14
问题内容

我有一个名为“ 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的任何打印信息(为什么这样)。


问题答案:

无法获取参数的原因是因为您破坏了.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

编辑)。



 类似资料:
  • 我希望能够将参数从docker-compose file>dockerfile传递到运行接受参数的python脚本的cmd/entrypoint 请协助,也许我在这里遗漏了什么或者只是没有正确理解。 谢谢!

  • 我正在一个java类中运行一个python脚本,如下所示: 问题在于脚本。py通常采用如下命令行参数: Pythonscript.py-i C:/diretory/path-o C:/目录/路径 有可能在Java中通过PythonTeperter传递这些参数吗? 更新: 感谢Juned Ahsan我的代码现在是这样的: 但是脚本仍然没有得到任何参数。 我这样用对了吗?

  • 问题内容: 我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。 例如,我会跑我的,将通过值(0,1,2,3)的列表迭代第一个脚本,并通过那些到第二脚本,然后,等 我发现了Stack Overflow问题1186789,这是一个类似的问题,但是ars的答案调用了一个函数,在这里我想运行整个脚本,而不仅仅是函数,而balpha的答案则调用了脚本,但没有参数。我将其更改

  • 当用作npm脚本参数时,是否可以调用从yargs检索密钥? OSX终端中的用户类型: 执行package.json: 这导致了 只有在package.json中硬编码时,这才有效,但我需要它是可配置的。 正如我所说的,我使用的是args,因为它似乎可以很容易地按名称检索键(与数组相反)。接受建议。 我错过了什么? 更新11-07-2017相关:发送命令行参数到npm脚本 但是,传入命令行OR会产生

  • 问题内容: 我有一个名为的MySQL脚本文件,其中包含: 我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量: 问题答案: 您可以使用用户变量来实现您描述的行为。在将变量用作模式标识符而不是数据值时,必须使用准备好的语句,以便可以动态组成查询。 : 调用为

  • 问题内容: 我有一个bash脚本a.sh,其中有一个python脚本b.py。python脚本计算某些内容,我希望它返回一个值,该值稍后将在a.sh中使用。我知道我能做 在a.sh中: 在b.py中: 但这不是那么方便,因为我还在b.py中打印了其他消息 有什么更好的方法吗? 编辑: 我现在正在做的只是 这意味着我可以在b.py中打印很多东西,但是只有最后一行(假设它不包含“ \ n”,这是最后一