猿问

在 Python 中查询创建 Python 进程的终端命令

我有一个我这样称呼的 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.argvsys.argv以多种方式失败。

  1. sys.argv返回foo/bar.py文件的完整路径。我需要原始命令用于调试目的,调用python /path/to/foo/bar.py与调用不同python foo.bar

  2. 在我的生产用例中,sys.argv返回['-c']而不是任何 Python 模块的名称或路径。我仍在解决为什么会发生这种情况,但我已经说明了为什么sys.argv这不是我想要的。

另一个流行的解决方案是用于argparse重建命令行输入,但我无法使用它,因为我无法控制 Python 代码的调用方式。解决方案必须是通用的。

有谁知道如何从 Python 脚本中获取用于调用 Python 脚本的原始命令?如果可能,该解决方案应与 Windows 兼容。


蝴蝶不菲
浏览 162回答 2
2回答

慕标琳琳

这将与 Windows 不兼容,但在 GNU/Linux 或 Solaris(信用:tripleee)中,您应该能够使用 /proc/self/cmdline 来准确查看您是如何被调用的: Import os with open("/proc/self/cmdline") as f:      print(f.readline())

MMTTMM

我发现了一些可能对 Windows 用户有用的东西:https : //bytes.com/topic/python/answers/706727-get-complete-command-line我将再次粘贴代码,在这里:import ctypesp = ctypes.windll.kernel32.GetCommandLineA()print ctypes.c_char_p(p).value该ctypes解决方案对我有用。另一位评论者指出,pywin32 也有自己的风格:import win32apiprint win32api.GetCommandLine ()我没有测试它,但这可能会更好。
随时随地看视频慕课网APP

相关分类

Python
我要回答