2014-12-08 4 views
-3

В Python можно получить аргументы командной строки без импорта sys (или любого другого модуля)?В Python командной строки args без импорта?

+11

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

+0

Я уверен, что есть какой-то грязный хак, который делает это возможным. Особенно, если требования неточны ... –

+1

Прежде всего, может быть ссылка на sys в некотором встроенном –

ответ

5

Да, если вы используете Linux.

Если вы знаете идентификатор процесса, вы можете прочитать его /proc/{pid}/cmdline файл, который содержит нуль разделенных список аргументов командной строки:

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

Но это трудно знать идентификатор процесса, прежде чем начать обработать. Но есть решение! Посмотрите на ВСЕ процессы!

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 

Так что, если мы запустим python2 stack.py arg1 arg2 arg3 в оболочке, список аргументов командной строки будет напечатан. Это предполагает, что у вас есть только один процесс, выполняющий скрипт в данный момент времени.

PS., MAX_PID - максимальный PID в вашей системе. Вы можете найти его в /proc/sys/kernel/pid_max.

PPS. Никогда, никогда, написать код. Это сообщение было 49% шуткой.

+0

Я надеялся на некоторые умные решения вроде этого! Благодаря! :) –

1

Нет, вы должны импортировать sys получить sys.argv, что где аргументы расположены

1

аргументы No. командной строки доступны только в sys.argv, которые не могут быть доступны без импорта SYS. Могу ли я спросить, почему вы не хотите импортировать sys?

Смежные вопросы