如何在 CMD 中不传递“python”的情况下使用 argparse?

Posted

技术标签:

【中文标题】如何在 CMD 中不传递“python”的情况下使用 argparse?【英文标题】:How to use argparse without passing 'python' in CMD? 【发布时间】:2018-05-21 19:24:40 【问题描述】:

我想运行一个 Python 脚本,它使用 argparse,而不必在开头输入 python

我做什么

$ python file.py --arg value

我想要什么

$ file --arg value

我已经通过将文件放入添加到 PATH 变量的文件夹中完成了第一部分,但是当我输入时 argparse 无法正常工作:

$ file --arg val

它说arg 不能是None,即使我将它传入(它无法读取我在像这样调用时传递它的参数,即使当我使用$ python file.py --arg val 时它工作得很好


我希望这是有道理的。

【问题讨论】:

试试看question。 @Lycopersicum 谢谢,这确实让我走上了正确的道路。 不要忘记发布答案,我也有兴趣看到它!但是,我不使用 windows,因此我无法自己测试。 我正在这样做:) 【参考方案1】:

所以问题的解决方案很简单,但很难找到。

问题是注册表中有问题。

执行这两个命令是第一步:

assoc .py=py_auto_file
ftype py_auto_file="C:\Anaconda\python.exe" "%1" %*

然后将位于键 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 的注册表值 default 编辑为 "C:\Python36\python.exe" "%1" %*

然后将.PY添加到PATHEXT

注意

Python36 替换为您的python 版本(如果路径不同,也可以使用路径)。

希望这对人们有所帮助;)


感谢@Lycopersicum 在下面的cmets 中链接了这个Question,帮助我得到了答案。

还 This link 帮助了我。

【讨论】:

py_auto_file 是错误的。在某些时候,您或代表您的 IDE 修改了默认文件关联,Windows 最终使用了自动生成的 ProgId(程序标识符)。除其他外,您将失去外壳丢弃处理程序。重置为使用默认 ProgID,Python.File,仍应将其配置为使用 py.exe 启动器。您应该可以在右键单击“打开方式”菜单上执行此操作。选择“选择另一个应用程序”。选择“Python”(“启动器”图标上应该有一个火箭)和“始终使用这个应用程序”。 另外,你使用CMD的ftype命令修改“HKLM\Software\Classes\py_auto_file\shell\open\command”的值,然后手动修改它是不明智的注册表编辑器为不同的值。另外,永远不要编辑 HKCR;它只是作为 HKCU\Software\Classes 和 HKLM\Software\Classes 的合并视图,优先考虑 HKCU。编辑它是不确定的,这取决于 HKCU 和 HKLM 中已经存在的密钥。 另外,ftypeassoc 仅修改默认的 HKLM 关联和 ProgId。一般来说,这对用户在“HKCU\Software\Microsoft\Windows\CurrentVersion\Exporer\FileExts”中的选择(如果存在)没有影响。如果没有当前用户选择并且没有覆盖 HKLM 默认值的 HKCU 默认值,或者如果您正在修改作为当前用户选择的 ProgId,它似乎有时会起作用。 很抱歉,我不太了解您在说什么。我遇到了问题,我按照这些步骤得到了我需要的东西,我决定分享它们以防有人需要它们。 我很感谢你。请随时编辑我的答案,以包含使用最佳实践的正确解决方案。我很乐意提供帮助,就像我在这里得到的帮助一样。谢谢!

以上是关于如何在 CMD 中不传递“python”的情况下使用 argparse?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中不传递参数的情况下创建对象?

如何在不使它们不可变的情况下使 python 数据类可散列?

如何在不使用滤镜的情况下使图像变暗? [复制]

如何在不需要额外点击的情况下使 DataGridCheckBoxColumn 可编辑?

如何在不使用 div 的情况下使 iframe 响应?

如何在不打开应用程序的情况下使 ContentObserver 工作?