문제

참고 : 이것은입니다 ~ 아니다 같은 질문 파이썬 : 서브 프로세스의 지속적인 쉘 변수, 그 질문은 실제로 쉘 변수가 아닌 환경 변수에 관한 것입니다.

쉘 내장을 사용하여 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 내장.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top