ПРИМЕЧАНИЕ. Это не тот же вопрос, что и Python: Persistent shell переменные в подпроцессе, так как этот вопрос на самом деле касается переменных среды, а не переменных оболочки.
Я пытаюсь автоматизировать базовый тест, который я делаю в csh, используя встроенную в оболочку команду time
. Вы можете настроить вывод time
, установив одноименную переменную в оболочке следующим образом:
set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")
Однако это, конечно, не переменная среды, поэтому вы не можете передать ее в параметре env
в конструкторе subprocess.Popen
(я попробовал это первым...). Вы можете взломать его вместе, злоупотребив (имо, во всяком случае) аргументом cmd
, чтобы сделать это, а затем вашей фактической работой (сокращенной для красивого отображения):
time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)
и это работает так, как вы ожидаете, но кажется, что это не совсем правильный путь (и может привести к довольно ужасной конструкции cmd
, когда вы хотите настроить кучу различных поведений оболочки).
Есть ли другой способ установить переменные оболочки в subprocess
, кроме этого кладжа?