【问题标题】:In Python, command line args without import?在 Python 中,没有导入的命令行参数?
【发布时间】:2014-12-08 22:35:38
【问题描述】:

在 Python 中,是否可以在不导入 sys(或任何其他模块)的情况下获取命令行参数?

【问题讨论】:

标签: python console arguments args


【解决方案1】:

是的,如果您使用的是 Linux。

如果您知道进程 ID,则可以读取其 /proc/{pid}/cmdline 文件,该文件包含一个以空值分隔的命令行参数列表:

PROCESS_ID = 14766
cmdline = open("/proc/" + str(pid) + "/cmdline").read()
print cmdline.split("\0")

但是在启动进程之前很难知道进程 ID。但有一个解决方案!查看所有流程!

PROGRAM_NAME = "python2\0stack.py"
MAX_PID = int(open("/proc/sys/kernel/pid_max").read())    

for pid in xrange(MAX_PID):
    try:
        cmd = open("/proc/" + str(pid) + "/cmdline").read().strip("\0")
        if PROGRAM_NAME in cmd:
            print cmd.split("\0")
            break
    except IOError:
        continue

因此,如果我们在 shell 中运行python2 stack.py arg1 arg2 arg3,则会打印出命令行参数列表。这假设您在给定时间只有一个进程运行脚本。

PS.,MAX_PID 是您系统上的最大 PID。你可以在/proc/sys/kernel/pid_max找到它。

PPS。从来没有,everever 写过这样的代码。这篇文章是 49% 的笑话。

【讨论】:

  • 我希望有一些像这样的聪明解决方案!谢谢! :)
  • 你有什么理由不使用/proc/self?答案似乎只是:open('/proc/self/cmdline').read().split('\0')man proc 没有提及是什么时候添加的,但是 /proc/self 被引用了 in this question two years before this answer 所以看起来不是很新。
【解决方案2】:

没有。必须导入sys才能得到sys.argv,也就是参数所在的位置

【讨论】:

    【解决方案3】:

    没有。命令行参数仅在 sys.argv 中可用,除非导入 sys,否则无法访问。
    请问为什么不想导入sys?

    【讨论】:

    • 不回答问题并要求澄清,这不是答案而是评论。
    【解决方案4】:

    在 Linux 上,这将为您提供一个与 sys.argv 返回的数组相同的数组:

    argv = open('/proc/self/cmdline').read().split('\0')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2014-04-02
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多