我有一个我这样称呼的 Python 模块python -m foo.bar arg1 -a foo --some-arg=10在bar.py模块内部,我需要查询用于调用模块的命令。例如,get_raw_terminal_command()将返回"python -m foo.bar arg1 -a foo --some-arg=10".我已经看到几个帖子建议import sys; sys.argv但sys.argv以多种方式失败。sys.argv返回foo/bar.py文件的完整路径。我需要原始命令用于调试目的,调用python /path/to/foo/bar.py与调用不同python foo.bar在我的生产用例中,sys.argv返回['-c']而不是任何 Python 模块的名称或路径。我仍在解决为什么会发生这种情况,但我已经说明了为什么sys.argv这不是我想要的。另一个流行的解决方案是用于argparse重建命令行输入,但我无法使用它,因为我无法控制 Python 代码的调用方式。解决方案必须是通用的。有谁知道如何从 Python 脚本中获取用于调用 Python 脚本的原始命令?如果可能,该解决方案应与 Windows 兼容。
2 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
这将与 Windows 不兼容,但在 GNU/Linux 或 Solaris(信用:tripleee)中,您应该能够使用 /proc/self/cmdline 来准确查看您是如何被调用的:
Import os
with open("/proc/self/cmdline") as f:
print(f.readline())
MMTTMM
TA贡献1869条经验 获得超4个赞
我发现了一些可能对 Windows 用户有用的东西:https : //bytes.com/topic/python/answers/706727-get-complete-command-line
我将再次粘贴代码,在这里:
import ctypes
p = ctypes.windll.kernel32.GetCommandLineA()
print ctypes.c_char_p(p).value
该ctypes解决方案对我有用。另一位评论者指出,pywin32 也有自己的风格:
import win32api
print win32api.GetCommandLine ()
我没有测试它,但这可能会更好。
添加回答
举报
0/150
提交
取消