복붙노트

[PYTHON] 서브 프로세스로 여러 개의 bash 명령 실행하기

PYTHON

서브 프로세스로 여러 개의 bash 명령 실행하기

echo a를 실행하면; echo b bash에서 결과는 두 명령이 모두 실행된다는 것입니다. 그러나 하위 프로세스를 사용하면 첫 번째 명령이 실행되어 나머지 줄 전체가 인쇄됩니다. 아래에있는 코드는 에코입니다. b 대신에 echo b를 사용하면 두 명령을 모두 실행시킬 수 있습니까?

import subprocess, shlex
def subprocess_cmd(command):
    process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
    proc_stdout = process.communicate()[0].strip() 
    print proc_stdout

subprocess_cmd("echo a; echo b")

해결법

  1. ==============================

    1.하위 프로세스에서는 shell = True를 사용해야하고 shlex.split는 사용하지 않아야합니다.

    하위 프로세스에서는 shell = True를 사용해야하고 shlex.split는 사용하지 않아야합니다.

    def subprocess_cmd(command):
        process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
        proc_stdout = process.communicate()[0].strip()
        print proc_stdout
    
    subprocess_cmd('echo a; echo b')
    

    보고:

    a
    b
    
  2. ==============================

    2.방금 python 안에서 bash 코드 (세미콜론으로 구분하지 않음)를 여러 줄 실행해야하는 상황에 걸려 넘어졌습니다. 이 시나리오에서는 제안 된 솔루션이 도움이되지 않습니다. 한 가지 방법은 파일을 저장 한 다음 Popen으로 실행하는 것이지만 내 상황에서는 불가능합니다.

    방금 python 안에서 bash 코드 (세미콜론으로 구분하지 않음)를 여러 줄 실행해야하는 상황에 걸려 넘어졌습니다. 이 시나리오에서는 제안 된 솔루션이 도움이되지 않습니다. 한 가지 방법은 파일을 저장 한 다음 Popen으로 실행하는 것이지만 내 상황에서는 불가능합니다.

    내가 뭘했는지는 다음과 같습니다.

    commands = '''
    echo "a"
    echo "b"
    echo "c"
    echo "d"
    '''
    
    process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    out, err = process.communicate(commands)
    print out
    

    그래서 나는 먼저 자식 bash 프로세스를 생성 한 후 실행을 지시합니다. 이 방법은 Popen 생성자에 직접 명령을 전달하는 제한을 없애줍니다.

  3. ==============================

    3."&&"를 사용하여 명령을 결합하십시오.

    "&&"를 사용하여 명령을 결합하십시오.

    os.system('echo a > outputa.txt && echo b > outputb.txt')
    
  4. ==============================

    4.한 번에 명령 만 실행하는 경우 subprocess.check_output 편의 함수를 사용할 수 있습니다.

    한 번에 명령 만 실행하는 경우 subprocess.check_output 편의 함수를 사용할 수 있습니다.

    def subprocess_cmd(command):
        output = subprocess.check_output(command, shell=True)
        print output
    
  5. ==============================

    5.

    >>> command = "echo a; echo b"
    >>> shlex.split(command);
        ['echo', 'a; echo', 'b']
    

    그래서 문제는 shlex 모듈이 ";"처리하지 못합니다.

  6. from https://stackoverflow.com/questions/17742789/running-multiple-bash-commands-with-subprocess by cc-by-sa and MIT license