官方文档中有关于subprocess的使用方法
在做网易的一个编程题,钱老板的保险箱,有一个可执行文件(包含windows、linux和macOS版本)地址为:http://59.111.13.242/leihuo_2019_guess.zip。每次输入一个0-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
可被 Popen
的 stdin, 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)
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)
image
image
网友评论