2017-09-19 12 views
0
나는 숫자의 큰 문자열 함께 일하고 있어요

, 좋아 어떤 당신은 여기에서 볼 수있는 유효한 CSV로 그것을 모습을 변하게하다 :잡아 콘솔 출력하고 (및/또는 JSON)

6060604052361561006c5760e060020a60003504630121b93f81146100e15780636637b882146101615780636dbf2fa0146101935780638da5cb5b1461026a578063a6f9dae11461027c578063beabacc8146102ae578063d979f5aa14610322578063e1fa763814610354575b61050b600060006000600460005054111561051d576004805460001901905560015460035460055460e260020a6320998771026060908152606492909252600160a060020a03908116608452909116906382661dc49060a49060209060448187876161da5a03f11561000257506105c3915050565b6105cb60043560005433600160a060020a039081169116141561015e57600180547fc9d27afe0000000000000000000000000000000000000000000000000000000060609081526064849052608492909252600160a060020a03169063c9d27afe9060a4906020906044816000876161da5a03f115610002575050505b50565b6105cb60043560005433600160a060020a039081169116141561015e5760018054600160a060020a0319168217905550565b60806020604435600481810135601f8101849004909302840160405260608381526105cb9482359460248035956064949391019190819083828082843750949650505050505050600054600160a060020a039081163390911614156102655782600160a060020a03168282604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561024b5780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f1505050505b505050565b6105cd600054600160a060020a031681565b6105cb60043560005433600160a060020a039081169116141561015e5760008054600160a060020a0319168217905550565b6105cb6004356024356044356000805433600160a060020a039081169116141561031c5760e060020a63a9059cbb026060908152600160a060020a03848116606452608484905285929083169163a9059cbb9160a4916020916044908290876161da5a03f115610002575050505b50505050565b6105cb60043560005433600160a060020a039081169116141561015e5760028054600160a060020a0319168217905550565b6105cb60043560243560005433600160a060020a03908116911614156105075760015460e060020a6370a0823102606090815230600160a060020a0390811660645291909116906370a08231906084906020906024816000876161da5a03f1156100025750506040805180516006556002546001547f1a695230000000000000000000000000000000000000000000000000000000008352600160a060020a039081166004840152925192169250631a695230916024828101926000929190829003018183876161da5a03f1156100025750505060048181556003839055600154604080517f013cf08b00000000000000000000000000000000000000000000000000000000815292830185905251600160a060020a03919091169163013cf08b91602482810192602092919082900301816000876161da5a03f11561000257505060408051805160058054600160a060020a0319169091179081905560015460035460e260020a63209987710284526004840152600160a060020a0391821660248401529251921692506382661dc491604482810192602092919082900301816000876161da5a03f115610002575050505b5050565b60408051918252519081900360200190f35b60015460e060020a6370a0823102606090815230600160a060020a0390811660645291909116906370a082319060849060209060248187876161da5a03f11561000257505060408051805160015460025460e060020a63a9059cbb028452600160a060020a039081166004850152602484018390529351919550909216925063a9059cbb916044828101926020929190829003018188876161da5a03f115610002575050505b600191505090565b005b6060908152602090f3 

을 그들은 내가 궁극적으로 어떻게하고 싶은 무엇

000000: PUSH1 0x60 
000002: PUSH1 0x40 
000004: MSTORE 
000005: CALLDATASIZE 
000006: ISZERO 
000007: PUSH2 0x006c 
000010: JUMPI 
000011: PUSH1 0xe0 
000013: PUSH1 0x02 
000015: EXP 
000016: PUSH1 0x00 
000018: CALLDATALOAD 
000019: DIV 

이 Rende의이다 :이 방법

echo "INPUT_DATA" >> file_name && evm disasm file_name 

및 출력 데이터 처리 재 '는 다음과 같습니다 CSV로 출력합니다 (또는 JSON 일 수도 있습니다). 이런 식으로 뭔가가 :

PUSH1 0x60, PUSH1 0x40, MSTORE, CALLDATASIZE, ISZERO, PUSH2 0x006c, JUMPI, PUSH1 0xe0, PUSH1 0x02, EXP, PUSH1 0x00, CALLDATALOAD, DIV 

그러나 그 순간에 나는 단지이 스크립트, 콘솔에 로그인 해요 :

import sys 
import subprocess 

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




if '__main__' == __name__: 

    file_name = sys.argv[1] 
    byte_code = sys.argv[2] 
    status = my_test_func(file_name, byte_code) 

    # python opcode-farmer.py 'tst2' '6005600401' 
    print(status) 

^는 하위를 만들기 때문에 그 스크립트는 가지 깔끔 -process를 볼 수 있습니다.

내가 알고 싶은 것은 출력을 스쿠프하는 가장 좋은 방법은 무엇이며 콘솔에 쓰는 대신 CSV로 변환 할 수있는 프로세스에 넣는 것입니다. 그래서 저는 어떻게해야 할 지에 대한 몇 가지 아이디어를 가지고 있습니다.하지만 꽤 많이 실패하지는 않습니다. 제 아이디어는 계산 상 비싸고 부끄럽지 않습니다. 그래서 SO 커뮤니티가 어떤 제안을 내놓고 있는지보고 싶습니다. . 작품의

이런 종류 :

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

두 ways- 모든 - 많은 목록의 첫 번째 또는 하위 최적 :

edits = csv.reader(status.splitlines(), delimiter=",") 
for row in edits: 
    print(row) 

그러나 그것을 있었어 .- 정말 -하지이 출력을 제공 그것과 같은 명령은 나중에 작동하기 어렵습니다. 또한 모든 불필요한 정보를 제거하지 않습니다. 그것을 위해 정규 표현식을 사용해야합니까?

내가 진정으로 원하는 것은 이것이다 :

이 약
PUSH1 0x60, PUSH1 0x40, MSTORE, CALLDATASIZE, ISZERO, PUSH2 0x006c, JUMPI, PUSH1 0xe0, PUSH1 0x02, EXP, PUSH1 0x00, CALLDATALOAD, DIV 

답변

1

어떻게?

', '.join([' '.join(line.split()[1:]) for line in status.splitlines()]) 
+0

그래서 어디서 적합합니까? 나는 여러 시간 동안 프로그래밍을 해왔으며, 이제는 그 구성 요소를 어떻게 통합하는지 명확하게 볼 수 없다. –