在Python中,是否可以在不导入sys(或任何其他模块)的情况下获取命令行参数?
答案 0 :(得分:7)
是的,如果您使用的是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。从不,永远,永远编写这样的代码。这篇文章是49%的笑话。
答案 1 :(得分:1)
没有。您必须导入sys
以获取sys.argv
,这是参数所在的位置
答案 2 :(得分:1)
没有。命令行参数仅在sys.argv
中可用,如果不导入sys
则无法访问
请问您为什么不想导入sys?
答案 3 :(得分:0)
在Linux上,这将为您提供与sys.argv
将返回的数组相同的数组:
argv = open('/proc/self/cmdline').read().split('\0')