Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 异步执行的命令捕获REPL输入_Julia_Stdin_Sudo - Fatal编程技术网

Julia 异步执行的命令捕获REPL输入

Julia 异步执行的命令捕获REPL输入,julia,stdin,sudo,Julia,Stdin,Sudo,我在Julia REPL中运行这样的外部命令: stream, process = open(`sudo cat file.txt`, "w", STDOUT) 命令sudocat file.txt在shell中标准执行时,要求输入密码,然后打印文件 所以我将其粘贴到REPL中,按enter键,它会立即返回,因为进程是异步运行的。到目前为止,一切正常 但是,当我开始在REPL中键入其他内容时,我正在键入的字符不会出现在屏幕上(sudo正在询问密码),因为异步过程(大概是)“窃取”我正在键入的文

我在Julia REPL中运行这样的外部命令:

stream, process = open(`sudo cat file.txt`, "w", STDOUT)
命令sudocat file.txt在shell中标准执行时,要求输入密码,然后打印文件

所以我将其粘贴到REPL中,按enter键,它会立即返回,因为进程是异步运行的。到目前为止,一切正常


但是,当我开始在REPL中键入其他内容时,我正在键入的字符不会出现在屏幕上(
sudo
正在询问密码),因为异步过程(大概是)“窃取”我正在键入的文本。

您对
打开
工作原理的理解是正确的。正如您在评论中所阐明的,您的问题是为什么
sudo
在终端中询问密码而不是从
流中读取密码。at很好地解释了这一点。引用答案的相关部分:

实际上,sudo的典型调用根本不从stdin读取密码。相反,sudo将直接访问控制终端(tty或pty,通过/dev/tty特殊文件),并直接输出提示和读取字符。这可以在sudo源代码中的tgetpass.c文件中看到

sudo
能够使用
-S
标志从stdin读取数据。如果您想从脚本中自己编写密码,可以使用此选项:

否则,如果您特别请求sudo从stdin读取数据,例如使用-S标志,它也会将提示写入stderr。这就是MadHatter的答案适用的情况


你能再解释一下你的问题吗?我扩展了答案,如果还不清楚请告诉我。这不仅仅是希望你输入密码吗?正如塔索斯所说,它可能只是要求输入密码。您没有看到xxx:
提示的
[sudo]密码吗?文档中正确说明STDIN是
,但
sudo
不从STDIN读取。有关更多信息,请参阅。