如何在 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 中已经存在的密钥。
另外,ftype
和 assoc
仅修改默认的 HKLM 关联和 ProgId。一般来说,这对用户在“HKCU\Software\Microsoft\Windows\CurrentVersion\Exporer\FileExts”中的选择(如果存在)没有影响。如果没有当前用户选择并且没有覆盖 HKLM 默认值的 HKCU 默认值,或者如果您正在修改作为当前用户选择的 ProgId,它似乎有时会起作用。
很抱歉,我不太了解您在说什么。我遇到了问题,我按照这些步骤得到了我需要的东西,我决定分享它们以防有人需要它们。
我很感谢你。请随时编辑我的答案,以包含使用最佳实践的正确解决方案。我很乐意提供帮助,就像我在这里得到的帮助一样。谢谢!以上是关于如何在 CMD 中不传递“python”的情况下使用 argparse?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使它们不可变的情况下使 python 数据类可散列?