하위 프로세스에서 쉘 변수를 설정하는 방법 (덜 못생긴 방식으로…)
-
12-09-2019 - |
문제
참고 : 이것은입니다 ~ 아니다 같은 질문 파이썬 : 서브 프로세스의 지속적인 쉘 변수, 그 질문은 실제로 쉘 변수가 아닌 환경 변수에 관한 것입니다.
쉘 내장을 사용하여 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
생성자 (먼저 시도했습니다 ...). 너 ~할 수 있다 학대 (IMO, 어쨌든)로 함께 해킹하십시오. 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
이 kludge 외에?
해결책
아동 프로세스 (호출 인수, 환경 및 스트림)에 전달할 수있는 옵션이 제한되어 있습니다. 쉘 변수를 설정하는 것은 더 일반적인 의미에서 어린이 프로세스의 내부 상태를 수정하는 것이기 때문에 "Kludge"라고 부르는 것은 실제로 매우 합리적입니다. 쉘 변수를로드하는 특별한 방법이있는 CSH 변형은 모릅니다.
그러나 파이프를 통해 모든 초기화 명령을 쉘에 작성하거나 파일에 작성하고 CSH의 다음으로 읽게함으로써 깔끔하게 만들 수 있습니다. source
내장.