小编hak*_*anc的帖子

Python:使用附加的输入和输出文件提供和解析与外部程序之间的数据流

问题: 我有一个设计糟糕的Fortran程序(我无法更改它,我坚持使用它)从stdin和其他输入文件中获取文本输入,并将文本输出结果写入stdout和其他输出文件.输入和输出的大小非常大,我想避免写入硬盘驱动器(慢速操作).我编写了一个函数,迭代几个输入文件的行,我也有多个输出的解析器.我真的不知道程序是否首先读取所有输入然后开始输出,或者在读取输入时开始输出.

目标: 拥有一个为外部程序提供所需功能的函数,并在输出来自程序时解析输出,而无需将数据写入硬盘驱动器上的文本文件.

研究: 使用文件的天真方式是:

from subprocess import PIPE, Popen

def execute_simple(cmd, stdin_iter, stdout_parser, input_files, output_files):

    for filename, file_iter in input_files.iteritems():
        with open(filename ,'w') as f:
            for line in file_iter:
                f.write(line + '\n')


    p_sub = Popen(
        shlex.split(cmd),
        stdin = PIPE,
        stdout = open('stdout.txt', 'w'),
        stderr = open('stderr.txt', 'w'),
        bufsize=1
    )
    for line in stdin_iter:
        p_sub.stdin.write(line + '\n')

    p_sub.stdin.close()
    p_sub.wait()

    data = {}
    for filename, parse_func in output_files.iteritems():
        # The stdout.txt and stderr.txt is included here
        with open(filename,'r') as f: …
Run Code Online (Sandbox Code Playgroud)

python legacy io asynchronous

16
推荐指数
2
解决办法
1660
查看次数

打印多维数组的值,输出为兼容的 matlab 代码

对于维度等于或小于 2 的矩阵,命令是:

例如:

>> mat2str(ones(2,2))

ans =

[1 1;1 1]
Run Code Online (Sandbox Code Playgroud)

但是,正如帮助所述,这不适用于更高的维度:

>> mat2str(rand(2,2,2))
Error using mat2str (line 49)
Input matrix must be 2-D.
Run Code Online (Sandbox Code Playgroud)

如何输出维数高于 2 且代码兼容的矩阵,而不求助于定制的 for 循环?

matlab multidimensional-array

3
推荐指数
1
解决办法
227
查看次数