在 Windows 命令行中使用管道到 运行 简单的 Fortran exe
Using piping in Windows command line to run simple Fortran exe
我有一个 Fortran 可执行文件,它在进行计算之前需要几个键盘输入。它在输入输入的终端中工作,但我想使用管道输入输入(Windows 10 命令行)。当我只有一个键盘输入时,管道工作得很好。我怎样才能让它与多个输入一起工作?
根据这里的类似问题,我几乎可以让它工作:。我查看了有关标准输入的文档,但我仍然无法理解。
这是一个只有一个输入的 Fortran 程序示例,它使用管道。
program foo
integer n
character*80 c
write (*,*) 'Enter 1,2,3 for cat,dog,fish'
read (*,*) n
if (n .eq. 1) then
write (*,*) 'meow'
elseif (n .eq. 2) then
write (*,*) 'woof'
elseif (n .eq. 3) then
write (*,*) 'blurp'
else
write (*,*) 'error1'
endif
C write (*,*) 'Enter y,n for yay,nay'
C read (*,*) c
C if (c == 'y') then
C write (*,*) 'yes'
C elseif (c == 'n') then
C write (*,*) 'no'
C elseif (n .eq. 3) then
C else
C write (*,*) 'error2'
C endif
end
终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
2
woof
C:\my\file\path> echo 1 | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
这是一个具有多个输入的 Fortran 程序示例,它不适用于管道。
与上面相同的程序,但注释行未注释。终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
3
blurp
Enter y,n for yay,nay
n
no
C:\my\file\path> echo 1 y | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
Enter y,n for yay,nay
At line 18 of file C:/my/file/path/foo.f (unit = 5, file = 'stdin')
Fortran runtime error: End of file
Error termination. Backtrace:
Could not print backtrace: libbacktrace could not find executable to open
#0 0x318dd91b
#1 0x318d6b34
#2 0x318d355b
#3 0x318d7f6c
#4 0x318e8e9d
#5 0x318d88df
#6 0x318d5190
#7 0x318b1691
#8 0x318f3f93
#9 0x318b13c0
#10 0x318b14f5
#11 0xb9677c23
#12 0xba24d4d0
#13 0xffffffff
编译器信息:
GNU gfortran,CMake 基于 wiki example
您有两个简单的读取语句。每个读取一条记录 = 一行文本。您需要提供两条记录或让程序在旧记录处继续。
在bash I can do echo -e "2 \n y" | ./a.out
to get two records into one echo
command, but I am not sure about Windows cmd. In Powershell you should use 。也就是说
echo "2 `n y"
如果可以更改 Fortran 代码,请使用非高级输入:
read (*,'(i1)',advance="no") n
有了这个改变我可以做到
> echo -e "2 y" | ./a.out
Enter 1,2,3 for cat,dog,fish
woof
已在 bash 中测试,但应该可以在其他地方使用,包括 cmd。
对于windowscmd,你可以使用for循环。
(for %i in (2 y) do @echo %i)|C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
woof
Enter y,n for yay,nay
yes
如果将其放入 .bat 或 .cmd,请记住使用两个 % 符号。有很多方法可以做到这一点。参见 How can I echo a newline in a batch file?
我有一个 Fortran 可执行文件,它在进行计算之前需要几个键盘输入。它在输入输入的终端中工作,但我想使用管道输入输入(Windows 10 命令行)。当我只有一个键盘输入时,管道工作得很好。我怎样才能让它与多个输入一起工作?
根据这里的类似问题,我几乎可以让它工作:
这是一个只有一个输入的 Fortran 程序示例,它使用管道。
program foo
integer n
character*80 c
write (*,*) 'Enter 1,2,3 for cat,dog,fish'
read (*,*) n
if (n .eq. 1) then
write (*,*) 'meow'
elseif (n .eq. 2) then
write (*,*) 'woof'
elseif (n .eq. 3) then
write (*,*) 'blurp'
else
write (*,*) 'error1'
endif
C write (*,*) 'Enter y,n for yay,nay'
C read (*,*) c
C if (c == 'y') then
C write (*,*) 'yes'
C elseif (c == 'n') then
C write (*,*) 'no'
C elseif (n .eq. 3) then
C else
C write (*,*) 'error2'
C endif
end
终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
2
woof
C:\my\file\path> echo 1 | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
这是一个具有多个输入的 Fortran 程序示例,它不适用于管道。
与上面相同的程序,但注释行未注释。终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
3
blurp
Enter y,n for yay,nay
n
no
C:\my\file\path> echo 1 y | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
Enter y,n for yay,nay
At line 18 of file C:/my/file/path/foo.f (unit = 5, file = 'stdin')
Fortran runtime error: End of file
Error termination. Backtrace:
Could not print backtrace: libbacktrace could not find executable to open
#0 0x318dd91b
#1 0x318d6b34
#2 0x318d355b
#3 0x318d7f6c
#4 0x318e8e9d
#5 0x318d88df
#6 0x318d5190
#7 0x318b1691
#8 0x318f3f93
#9 0x318b13c0
#10 0x318b14f5
#11 0xb9677c23
#12 0xba24d4d0
#13 0xffffffff
编译器信息: GNU gfortran,CMake 基于 wiki example
您有两个简单的读取语句。每个读取一条记录 = 一行文本。您需要提供两条记录或让程序在旧记录处继续。
在bash I can do echo -e "2 \n y" | ./a.out
to get two records into one echo
command, but I am not sure about Windows cmd. In Powershell you should use
echo "2 `n y"
如果可以更改 Fortran 代码,请使用非高级输入:
read (*,'(i1)',advance="no") n
有了这个改变我可以做到
> echo -e "2 y" | ./a.out
Enter 1,2,3 for cat,dog,fish
woof
已在 bash 中测试,但应该可以在其他地方使用,包括 cmd。
对于windowscmd,你可以使用for循环。
(for %i in (2 y) do @echo %i)|C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
woof
Enter y,n for yay,nay
yes
如果将其放入 .bat 或 .cmd,请记住使用两个 % 符号。有很多方法可以做到这一点。参见 How can I echo a newline in a batch file?