2017-09-19 6 views
0

を収集する必要があります。ある意味では、コンソールに届く出力を収集する単純なBashスクリプトと似ています。それが生成する実際のデータは次のようになります:コールは、私は以下の短いコマンドを持つ変数コンテンツに適応し、その結果

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

私はPythonスクリプトの内部から、このコマンドを呼び出すと、それは私がプロセスを進めることができます表現に生成するデータを収集したいと思います。

そこで私は、サブプロセスの管理に探して、そしてそのような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をファイルに書き込むだけの方は... Pythonを使用してファイルに書き込むのはなぜですか?

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'] 

をあなたはそれを分割する必要はありませんが、私はの点では上記のポスターに同意しますこれにアプローチする方法。