子进程缺少输出文件
subprocess missing output file
我对 python 完全陌生,但我正在努力学习。
我想使用 subprocess 命令来 运行 我可以在 bash 环境中的终端中调用的模拟程序。语法非常简单:
命令 inputfile.in
命令中的位置是 tcltk 环境中的更大模拟脚本。
好的,我已经阅读了很多 python 文献,并决定使用 subprocess 命令的 Popen 功能。
所以据我了解,我应该能够将命令格式化如下:
p= subprocess.Popen(['command','inputfile.in'],stdout= subprocess.PIPE])
print(p.communicate())
这个命令的输出是两个文件。当我 运行 终端中的命令时,我在与原始输入文件相同的目录中得到两个文件。
File1.fid File2.spe.
当我使用 Popen 时,有两件事让我感到困惑。
(1) 我没有将任何输出文件写入输入文件的目录。 (2) 值 p.communicate 存在表示模拟是 运行 。
输出文件发生了什么。是否有指定的方法来调用生成文件的命令函数?
我在 for 循环内的 Jupyter-notebook 单元格中 运行ning 这个。此 for 循环用于迭代更改输入文件,从而系统地改变模拟条件。我的操作系统是 mac osx。
目标是在 for 循环的每次迭代中模拟或 运行 命令,然后将输出文件数据存储在更大的字典中。稍后我想在最小化残差的优化过程中迭代地将输出文件数据与实验数据进行比较。
如有任何帮助,我将不胜感激。如果 popen 不是执行此操作的正确 python 函数,则还有任何方向。
让我们从像这样简单的事情中学习:
# This is equivalent with the command line `dir *.* /s /b` on Windows
import subprocess
sp = subprocess.Popen(['dir', '*.*', '/s', '/b'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
(std_out, std_err) = sp.communicate() # returns (stdout, stderr)
# print out if error occur
print('std_err: ', std_err) # expect ('std_err: ', '')
# print out saved echoing messages
print('std_out: ', std_out) # expect ('std_out: ', ... can be a long list ...)
我对 python 完全陌生,但我正在努力学习。
我想使用 subprocess 命令来 运行 我可以在 bash 环境中的终端中调用的模拟程序。语法非常简单: 命令 inputfile.in 命令中的位置是 tcltk 环境中的更大模拟脚本。
好的,我已经阅读了很多 python 文献,并决定使用 subprocess 命令的 Popen 功能。
所以据我了解,我应该能够将命令格式化如下:
p= subprocess.Popen(['command','inputfile.in'],stdout= subprocess.PIPE])
print(p.communicate())
这个命令的输出是两个文件。当我 运行 终端中的命令时,我在与原始输入文件相同的目录中得到两个文件。
File1.fid File2.spe.
当我使用 Popen 时,有两件事让我感到困惑。 (1) 我没有将任何输出文件写入输入文件的目录。 (2) 值 p.communicate 存在表示模拟是 运行 。
输出文件发生了什么。是否有指定的方法来调用生成文件的命令函数?
我在 for 循环内的 Jupyter-notebook 单元格中 运行ning 这个。此 for 循环用于迭代更改输入文件,从而系统地改变模拟条件。我的操作系统是 mac osx。
目标是在 for 循环的每次迭代中模拟或 运行 命令,然后将输出文件数据存储在更大的字典中。稍后我想在最小化残差的优化过程中迭代地将输出文件数据与实验数据进行比较。
如有任何帮助,我将不胜感激。如果 popen 不是执行此操作的正确 python 函数,则还有任何方向。
让我们从像这样简单的事情中学习:
# This is equivalent with the command line `dir *.* /s /b` on Windows
import subprocess
sp = subprocess.Popen(['dir', '*.*', '/s', '/b'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
(std_out, std_err) = sp.communicate() # returns (stdout, stderr)
# print out if error occur
print('std_err: ', std_err) # expect ('std_err: ', '')
# print out saved echoing messages
print('std_out: ', std_out) # expect ('std_out: ', ... can be a long list ...)