python的等待命令是什么_Python subprocess.call不等待命令执行

我是python的新手,我需要在课程中使用它进行作业.我在Freemat / octave / matlab .m文件中开发了解决方案(优化算法),并希望从Python调用它(python代码将由分级python脚本调用).

.m文件读取一个名为tmp.data的文件,并将输出写入output.txt.然后,python脚本应从该输出中读取并将其转换为分级脚本期望的结果.

一切运行正常,除非我无法让Python等待对Matlab的调用完成,因此在以下几行上会产生错误.

这是代码:

#!/usr/bin/python

# -*- coding: utf-8 -*-

from collections import namedtuple

Item = namedtuple("Item", ['index', 'value', 'weight'])

import subprocess

import os

from subprocess import Popen, PIPE

def solve_it(input_data):

# Modify this code to run your optimization algorithm

# Write the inputData to a temporay file

tmp_file_name = 'tmp.data'

tmp_file = open(tmp_file_name, 'w')

tmp_file.write(input_data)

tmp_file.close()

# call matlab (or any other solver)

# subprocess.call('matlab -r gp(\'tmp.data\')', shell=1)

# run=os.system

# a=run('matlab -r gp(\'tmp.data\')')

# process = Popen('matlab -r gp(\'tmp.data\')', stdout=PIPE)

# Popen.wait()

# (stdout, stderr) = process.communicate()

subprocess.call('matlab -r gp(\'tmp.data\')',shell=0)

# Read result from file

with open('output.txt') as f:

result = f.read()

# remove the temporay file

os.remove(tmp_file_name)

os.remove('output.txt')

return result

# return stdout.strip()

# prepare the solution in the specified output format

# output_data = str(value) + ' ' + str(0) + '\n'

# output_data += ' '.join(map(str, taken))

# return output_data

import sys

if __name__ == '__main__':

if len(sys.argv) > 1:

file_location = sys.argv[1].strip()

input_data_file = open(file_location, 'r')

input_data = ''.join(input_data_file.readlines())

input_data_file.close()

print solve_it(input_data)

else:

print 'This test requires an input file. Please select one from the data directory. (i.e. python solver.py ./data/ks_4_0)'

如您所见,我尝试了subprocess.call,popen,os.system …都无济于事.他们都给我类似的错误:

C:\Users\gp\Documents\Documents\personal\educacion\Discrete Optimization\knapsack>python2 solver.py data/ks_19_0

Traceback (most recent call last):

File "solver.py", line 60, in

print solve_it(input_data)

File "solver.py", line 30, in solve_it

with open('output.txt') as f:

IOError: [Errno 2] No such file or directory: 'output.txt'

当然!当matlab仍在打开过程中时,会出现错误.因此,它正在尝试访问尚未创建的文件.

我应该怎么做才能让Python等待Matlab完成?

感谢您的帮助,谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值