我在使用python工具调用子进程或任何进程时遇到问题。我的ELF和python代码位于同一个文件夹中。ELF的工作原理如下:输入、输出、输入、输出:大约40次,我需要将数据发送到程序的输入端。起初我试着用烟斗:python -c 'print "0 0xdeadbeef hello 5"*40'| ./elf但精灵疯了,让我的电脑停止工作。如果你不明白我的意思,现在就试着理解:精灵等待3个选项的输入[0/1/2],我选择了0,然后精灵要求我输入字符串、另一个字符串和一个整数。之后精灵再次返回选项菜单,我需要做40次,然后我需要为精灵发送2,所以实际上,我需要这样做:python -c 'print "0 0xdeadbeef hello 5"*40 +"2"'| ./elf但是第一个命令不起作用,所以它也不能起作用。在尝试了“外壳解决方案”之后,我试图使用子进程库从我的代码中运行elf,但它并没有正常工作,我尝试了communicate函数和写入stdout,但它已经被杀死,甚至没有显示elf的任何打印,我甚至不知道我要发送的是不是要输入。另外,我试过调用函数,因为没有一个对我有效。
代码:
import subprocessp=subprocess.Popen(['./elf'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)out = p.communicate(input='0') #not responding
也尝试过p.stdin.write('0\n'),然后从标准输出中读取,但仍然没有答案
谢谢你们!

最佳答案

python -c 'print "0 0xdeadbeef hello 5"*40
目前还不清楚你希望它能产生什么样的输出。我想你希望

0 0xdeadbeef hello 5
0 0xdeadbeef hello 5
...

但这实际上产生了:
0 0xdeadbeef hello 50 0xdeadbeef hello 50 0xdeadbeef hello 50 0xdeadbeef ...

这可能不是./elf所期望或正确处理的。
如果你真的想要前者而不是后者,请尝试:
python -c 'print "0 0xdeadbeef hello 5\n"*40 +"2"'| ./elf

关于python - 从python代码调用ELF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44841656/

10-13 07:07