첫째, the docs for subprocess.call
에서 살펴 :
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
args가 설명하는 명령을 실행하십시오. 명령이 완료 될 때까지 기다린 다음 returncode 속성을 리턴하십시오.
이 명령은 subprocess.call(...).strip()
을 호출하려는 시도가 실패 할 수 있도록 정수인 프로세스 반환 코드를 반환합니다. 인수
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
실행 명령을하고 바이트 문자열로 출력을 반환 : 명령의 출력을 원하는 경우에, 당신은해야합니다. 당신이했습니다 다음
output = subprocess.call(["cluster", "submit", "{}",
"gs://{}/{}".format(cluster_name, bucket, file)]).strip()
을하지만 당신은 당신이 .format
를 호출 하지되는 베어 "{}"
를 가지고 있기 때문에 몇 가지 기본적인 파이썬 문제는, 거기에, 그리고 :
이것은 당신에게 줄 것이다 "gs://{}/{}"
에는 형식 마커가 두 개 있지만 매개 변수가 세 개 있습니다.
output = subprocess.call(["cluster", "submit", cluster_name,
"gs://{}/{}".format(bucket, file)]).strip()
당신이 두 번째 예에서와 같이 shell=True
를 사용
, 당신은 목록이 아닌 문자열을 전달합니다 : 당신은 더 뭔가를 원한다. 예 :
output = subprocess.check_output("cluster submit {} gs://{}/{}".format(
cluster_name, bucket_name, script), shell=True).strip()
"클러스터"란 무엇입니까? 별명 인 경우, BASH가이를 해결할 수 있도록 쉘에 포 K해야합니다. 이 답변보기 : https://stackoverflow.com/questions/89228/calling-an-external-command-in-python/89243#89243 –
@StuartBuckingham, 비대화 형 쉘은 별칭을 지원하지 않습니다. 그들은 bash에서 켜질 수 있지만, 심지어 비대화 형 쉘은'.bashrc' 또는'.bash_profile'을 실행하지 않기 때문에 보이지 않습니다. –
@ PM2Ring, 기본'sh'는 아무 관계가 없습니다. 'shell = True'가 없다면, 어떤 쉘을 실행할지를 결정하는 데 사용되는 shebang 만이며, shebang이없는 스크립트를 실행하는 것은 실패합니다; 커널의'exec' 호출이 실패 할 경우 다른 쉘 인터프리터를 생성하는 대체 동작이있는 경우에만 가능합니다. –