为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2021-11-09 11:02:36
我有一个我这样称呼的 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())


查看完整回答
反对 回复 2021-11-09
?
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 ()

我没有测试它,但这可能会更好。


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信