bash脚本:
#!/bin/sh
/usr/local/gromacs/bin/pdb2gmx -f ${1}.pdb -o ${1}.gro -p ${1}.top << EOF
14
6
所以当运行程序时,它会停止并在两个不同的点上一个接一个地请求用户输入。在bash脚本中,仅仅放下14和6似乎满足了输入要求,但我似乎无法在C中完成相同的技巧(另外,我不确定EOF在那里做什么,我'我只是跟随其他人的例子,如果没有它,脚本将无法工作)。
这是我到目前为止在C:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * pdb2gmx;
pdb2gmx = popen( "pdb2gmx -f 1BEO.pdb -o 1BEO.gro -p 1BEO.top" , "w" );
fprintf( pdb2gmx, "EOF" );
fprintf( pdb2gmx, "14" );
fprintf( pdb2gmx, "6" );
pclose( pdb2gmx );
}
但是当执行此代码时,pdb2gmx只会在需要用户输入的第一个点挂起。那我错过了什么?
我的感觉是C程序本身也挂在popen
行的执行上,而且从未到达fprintf
行,但我认为popen
模式设置到"w"
你可以像处理用户输入那样处理返回的流,所以我很困惑。
答案 0 :(得分:2)
您可能需要在这些\n
字符串的末尾添加一些换行符(fprintf
)...
答案 1 :(得分:1)
你检查了pdb2gmx
的值 - 是否正确设置了路径,以便程序找到pdb2gmx可执行文件?
您可能还想在fprintf()
之后调用fflush()