0

我遇到了一个问题,我不知道这是否可以在像 Bash 或 Python 这样的 Shell 中实现。

我需要多次运行 C 程序,该程序是用于 TEM 图像模拟的“原子锅”。如果我运行这个程序

./atompot

它的输出是这样的:

atompot version dated 8-oct-2012 EJK
Copyright (C) 1998-2010 Earl J. Kirkland
This program is provided AS-IS with ABSOLUTELY NO WARRANTY
under the GNU general public license

calculate projected atomic potentials (to use in multislice)
using FFTW

Name of file with input crystal data :

然后我需要提供输入 crtstal 数据文件,如:

stra.dat

然后你可以得到:

Name of file to get binary output of atomic potential :

然后我给出名字:

straa.tif   

然后你得到:

Real space dimensions in pixels Nx, Ny :

您的回答如下:

512 512

然后输出如下:

 Replicate unit cell by NCELLX,NCELLY,NCELLZ :

回答:

  8 8 8

问:

  Do you want to add thermal displacements to atomic coord.? (y/n) :

回答:

  n

过程有点像这样。是否可以使用 Shell 或 Python 实现调用 C 程序并给出使程序自动运行所需的所有参数?

例如,我可以将单元格形式 8 8 8 更改为 100 100 100。并保持其他参数相同。似乎所有这些都可以在 Sheel 脚本中完成,但是如何实现一些 C 程序,它可以为您提供输入内容的说明。

谢谢!

4

2 回答 2

2

如果程序从标准输入读取,只需将所有内容放在一个文件中:

stra.dat
straa.tif
512 512
8 8 8
n

和运行:

./atompot < filename

如果您想做一些更复杂的事情(即解析输出或实现分支),您可以查看 python 中的 subprocess.Popen。

于 2013-05-18T15:47:59.883 回答
1

你可以像这样制作一个shell脚本:

echo -e 'stra.dat\nstraa.tif\n...' | ./atompot

要获得更多控制,您可能需要查看expect.

于 2013-05-18T15:50:03.300 回答