Hello StackOverflow用户我正在尝试编写一些代码来打开一个新的控制台/终端窗口,启动GnuPlot,执行gnuplot
命令,然后使用plot sin(x)
绘制正弦函数。
请注意,只有在gnuplot
命令中运行它时才会打印出来。 GnuPlot程序是一种Python shell,如果你还没有得到图片。
我可以让它执行gnuplot
只是很好,它在当前窗口运行命令(不是这个问题的问题,但随时解决它! )但它不会将plot sin(x)
识别为命令。我的猜测是它执行gnuplot
并以某种方式退出GnuPlot shell并返回到正常的控制台模式。
注意:我使用的是KUbuntu 16.04 LTS。
public void Plot() {
// GetCommand() always returns "gnuplot" for now.
ProcessStartInfo pInfo = new ProcessStartInfo("/bin/bash", String.Format("-c {0};plot sin(x)", GetCommand())) {
RedirectStandardInput = true,
RedirectStandardOutput = true,
CreateNoWindow = true,
UseShellExecute = false
};
Process process = new Process () { StartInfo = pInfo };
process.Start ();
}
控制台返回错误:sin(x): plot: command not found
。
要用; plot sin(x)
替换&& plot sin(x)
,会返回相同的错误。
要使用行process.StandardInput.WriteLine ("plot sin(x)");
写入StandardInput,但它会抛出 System.InvalidOperationException 通知Standard input has not been redirected
甚至我在ProcessStartInfo上重定向它!
答案 0 :(得分:1)
您可以使用fifo
文件作为gnuplot
的输入文件,然后写入该文件以提供gnuplot
脚本命令。
(man mkfifo
了解详情)
Process.Start("mkfifo", "/tmp/plotpipe");
var pInfo = new ProcessStartInfo(@"/usr/local/bin/gnuplot", "/tmp/plotpipe")
{
RedirectStandardInput = false,
RedirectStandardOutput = false,
CreateNoWindow = true,
UseShellExecute = false
};
var process = new Process() { StartInfo = pInfo };
process.Start();
using (StreamWriter file = new StreamWriter(@"/tmp/plotpipe", false))
{
file.Write("print sum [i=1:10] i");
}
Process.Start("rm", "/tmp/plotpipe");
55.0
Press any key to continue...