subprocess 反复输入参数 运行可执行文件 并获取输出

官方文档中有关于subprocess的使用方法

在做网易的一个编程题,钱老板的保险箱,有一个可执行文件(包含windows、linux和macOS版本)地址为:http://59.111.13.242/leihuo_2019_guess.zip。每次输入一个0-1的浮点数,会得到一个输出。

subprocess 反复输入参数 运行可执行文件 并获取输出_第1张图片
image

思路:通过多次直行源代码来拟合出这个函数的曲线。

因此首先需要获得数据集,就是获取多次的输入输出值来进行拟合。小样本拟合效果不佳,因此需要多次进行密码的输入并且获取其输出。


import subprocess

def create_grid(commands):

    process = subprocess.Popen(

    ['/Users/xds/Downloads/leihuo_2019_guess(1)/guess_macos'],

    stdout=subprocess.PIPE,

    stdin=subprocess.PIPE,

    stderr=subprocess.PIPE)

#    print(type(commands))

    out = process.communicate(commands)

#    process.communicate(input= '\n'.join(commands) + '\n')

    print(out)

subprocess.PIPE
可被 Popenstdin, stdout 或者 stderr 参数使用的特殊值, 表示打开标准流的管道. 常用于 Popen.communicate().

方法1

可以新建一个文本,然后按行读取要输入的参数

# 打开文件
f = open('/Users/xds/Downloads/leihuo_2019_guess(1)/input.txt')
# 连成字符串
input = ''.join(f)
# 转成字节码
input = input.encode()
# 将每一行输入
create_grid(input)
subprocess 反复输入参数 运行可执行文件 并获取输出_第2张图片
image

方法2

也可以新建一个numpy数组,然后处理成字节,输进函数

# 生成一个numpy数组
x2 = np.arange(1,25,0.1)/25
# 拼接成一个list
a = [''.join(str(i)) for i in x2]
# 用\n连接成字符串,并转成字节
b = ('\n'.join(a)).encode()
create_grid(b)
subprocess 反复输入参数 运行可执行文件 并获取输出_第3张图片
image

subprocess 反复输入参数 运行可执行文件 并获取输出_第4张图片
image

你可能感兴趣的:(subprocess 反复输入参数 运行可执行文件 并获取输出)