2017-09-19 1 views
0

를 수집해야 나는 다음과 같은 짧은 명령이 : 나는 파이썬 스크립트 내에서 발행하고 싶습니다전화는 변수 내용에 적응하고, 그 결과

echo "6005600401" >> tst1 && evm disasm tst1 

합니다. 어떤 의미에서는 콘솔에 도착하는 출력을 수집하는 간단한 Bash 스크립트와 유사합니다. 가 생성하는 실제 데이터는 다음과 같이 표시됩니다

6005600401 
000000: PUSH1 0x05 
000002: PUSH1 0x04 
000004: ADD 

내가 파이썬 스크립트의 내부에서이 명령을 호출하고 그것이 내가 과정을 촉진 할 수있는 표현으로 생성하는 데이터를 수집하고 싶습니다.

따라서 나는 서브 프로세스 관리에 찾고, 그래서 같이 python 콘솔의 그것과 자신을 익숙했습니다 :

>>> import subprocess 
>>> subprocess.call("exit 1", shell=True) 
1 
>>> subprocess.check_output(["echo", "Hello World!"]) 
'Hello World!\n' 
status = subprocess.call("ls" + " -l", shell=True) 

배쉬로 그 명령을 넣어 넣어 어렵지 않을 것 같다 스크립트를 실행 한 다음 키커를 실행하면 다른 구성 요소의 결과에 따라 echo에 의해 호출 된 값을 변경해야하므로 echo이 출력하는 파일을 변경해야합니다.

그러면 변수를 변경할 수있는 Python 스크립트 내부에서 하위 프로세스를 호출 한 다음 전성 데이터 구조에서 결과를 수집하는 방법에 대해 질문합니다.

>>> status = subprocess.call("echo" + " '6005600401' >> tst2 && evm disasm tst2", shell=True) 
6005600401 
000000: PUSH1 0x05 
000002: PUSH1 0x04 
000004: ADD 

일을 할 수 있지만, 그것은 가장 좋은 방법은? 결과를 수집하는 방법?

답변

2

echo을 파일에 쓰는 중 ... 파이썬을 사용하여 파일에 쓰지 않는 이유는 무엇입니까?

with open('tst2', 'w') as fd: 
    fd.write('6005600401\n') 
status = subprocess.check_output(['evm', 'disasm', 'tst2']) 

심지어 함수에서이 문제를 마무리 할 수 ​​:

def my_test_func(filename, data): 
    with open(filename, 'w') as fd: 
     fd.write(data) 
     fd.write('\n') 
    return subprocess.check_output(['evm', 'disasm', filename]) 

status = my_test_func('tst2', '6005600401') 

또는 대신라는 이름의 파일을 사용하여, 당신은 tmpfile 모듈을 조사 할 수있다.

2

어때? 그런 다음

check_out = lambda *cmd: subprocess.check_output(' '.join(map(str, cmd)), shell=True, executable='/bin/bash', stderr=subprocess.STDOUT).split() 

c = 'echo {} >> {} && evm disarm {}' 

당신은 문자열 형식 c 및 수행 할 수 있습니다 :

check_out(c.format(*args)) 

['6005600401', 
'000000: PUSH1 0x05', 
'000002: PUSH1 0x04', 
'000004: ADD'] 

당신은 당신이 원하지 않는 경우를 분리 할 필요가 없습니다,하지만 난의 관점에서 위의 포스터에 동의 이 접근 방법.