Articles of pipe理员

防止意外的stdin读取并在subprocess中locking

一个简单的例子,我试图解决所有情况。 我正在运行一个subprocess来执行某个任务,我不希望它要求stdin,但是在极less数情况下,我可能没有想到,它可能会尝试读取。 我想阻止它挂在那种情况下。 这里是一个典型的例子: import subprocess p = subprocess.Popen(["unzip", "-tqq", "encrypted.zip"]) p.wait() 这将永远挂起。 我已经尝试添加 stdin=open(os.devnull) 这样.. 如果我find一个有价值的解决scheme将发布 对于我来说在父进程中接受一个例外就足够了 – 而不是无休止地等待沟通/等待。 更新:似乎问题可能比我最初期望的更复杂,subprocess(在密码和其他情况下)从其他文件描述符中读取 – 例如与/ dev / tty进行交互的shell。 可能不像我想的那样容易解决..

捕获variables中的命令输出并将其抑制

我想在shell脚本中捕获以下命令的输出: echo "User-Name=root,User-Password=root123" | radclient 192.168.19.104 auth testing123 我有一个shell脚本如下: FILE=server while IFS="\t" read -r ip key; do case "$ip" in "0.0.0.0") continue ;; esac echo "User-Name=root,User-Password=root123" | radclient $ip auth $key done < "$FILE" exit 1 编辑:删除额外的引号,它的作品。 现在,运行命令: echo "User-Name=root,User-Password=root123" | radclient 192.168.19.104 auth testing123 它返回以下输出:(实际上radclient返回以下输出)。 Received response ID 1, code 2, length = 33 […]

当stdout被用来输出二进制数据,我怎样才能输出debugging/详细信息到terminal?

我正在编写一个应用程序,将打开一个文件,并输出一些处理版本。 它将是一个graphics桌面应用程序,但也必须适合在Web服务器上运行。 因此,它需要为Web应用程序的后端代码(可能是PHP)提供一个合适的接口。 我决定最通用的接口是一个CLI,其中程序每个文件被调用一次。 生成的数据通过stdoutpipe道输出。 这样就不需要创build临时文件。 这一切都发生在记忆中。 我想能够从terminal手动调用该程序,并看到详细的debugging输出。 一般来说,当stdout被用于输出数据stream时,传统的输出其他信息的方式是什么? 我应该使用stderr还是有另一种方式? 我希望能够像这样调用该程序,并看到一些debugging输出。 ./program –some-option –verbose –file =“./ myfile.txt”> ./output.txt 我可以使用文件描述符3(或其他数字)的二进制数据和标准输出的详细信息,并做到这一点? ./program –some-option –verbose –file =“./ myfile.txt”3> ./output.txt 谢谢

如何使两个不同的Python脚本在同一个端口上运行?

目前我正在使用web.py开发Python中的Web服务,它提供不同的function。 就像是 BigQueryService.py LogicImplementer.py PostgreService.py 在本地机器上运行时,每项服务都能正常工作。 在服务器上部署之后,由于我引用了其他的python脚本,它将返回一个模块错误。 由于我们必须在同一个端口上运行所有的服务,我把所有的脚本粘贴到一个名为Engine文件中,并使用命令 $ nohup python Engine.py 8080 & 有没有更好的方法来构buildweb.py中的服务? 还是有办法在同一个端口上运行所有单独的脚本?

忽略Linuxpipe道中的错误

我在filenames.txt文件中有一长串的文件名。 这些文件是lzo压缩的,我使用lzop解压缩它们以便在stream水线中进一步处理。 cat filenames.txt | (xargs lzop -dc || true) | python lineprocessor.py > output.txt 所以文件名被逐行input到lzop -dc中。 然后将它们解压缩并导入到我写的lineprocessor.py脚本中。 最后,lineprocessor.py的输出写在output.txt中。 问题是filenames.txt中的一些文件没有正确压缩,lzop崩溃,整个pipe道也是如此。 我加了|| 真正的防止这个,但它没有帮助。 lzop没有select忽略错误。 我不关心不正确的压缩文件。 有什么办法可以轻松解决这个问题吗? 无论lzop -dc命令发生了什么,我都希望pipe道继续运行。

Linux shell中的pipe道function写在C中

我的迷你shell程序接受pipe道命令,例如ls -l | wc -l ls -l | wc -l并使用excevp来执行这些命令。 我的问题是,如果没有fork()execvp,pipe道命令工作正常,但后来shell终止。 如果execvp有fork(),则会发生死循环。 而我无法修复它。 码: void run_pipe(char **args){ int ps[2]; pipe(ps); pid_t pid = fork(); pid_t child_pid; int child_status; if(pid == 0){ // child process close(1); close(ps[0]); dup2(ps[1], 1); //eg cmd[0] = "ls", cmd[1] = "-l" char ** cmd = split(args[index], " \t"); //if fork here, […]

Linux内核中kzalloc_node的内存节点是什么?

我不明白kzalloc_node函数中的内存节点是什么。 描述中说“从特定的内存节点分配零内存”。 但是什么是内存节点? 我特别关注截止dateI / O调度程序的一部分(如下所示)。 static int deadline_init_queue(struct request_queue *q, struct elevator_type *e) { struct deadline_data *dd; … dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node); … }

计数器循环pipe道grep似乎意外地随机

尝试在5次迭代中让grep停止一个while循环,这样/ tmp / foo应该只有5行: n=1 while [ $n -le 2000 ] do echo $n n=$(( $n + 1 )) done | tee /tmp/foo | grep -q ^5 支票计数: wc -l < /tmp/foo 输出: 34 上面的重复运行每次最多返回不同的数字,但并不是非常随机的 – 在bash中运行5000次以上,例如1500秒左右运行5000次, 短跑运行157次106秒。 这些结果似乎比最初的实验更有趣。 这段代码发生了什么?

在Bash中inputJava程序

我有一个Java程序: public class ProcessMain { public static final void main(String[] args) throws Exception { Scanner keyboard = new Scanner(System.in); boolean exit = false; do { if(keyboard.hasNext()){ String input = keyboard.next(); System.out.println(input); if( "abort".equals(input)){ ABORT(); exit = true; } }else{ System.out.println("Nothing"); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } […]

父母怎样才能用一根pipe子给n个孩子发消息?

我想要做的是给每个孩子发一个信息,然后看看哪一个先打印出来。 我试过使用一个pipe道,所以我的代码如下所示: int main() { int pfd[2]; if(pipe(pfd)<0){ perror("pfd error"); exit(1); } int n=5; for(int i=1;i<=n;i++){ pid_t pid=fork(); if(pid<0){ perror("fork error\n"); exit(1); } if(pid==0){ close(pfd[1]); char ms[256]; int h; read(pfd[0],&h,sizeof(int)); read(pfd[0],ms,h*sizeof(char)); cout<<i<<"_"<<ms<<endl; close(pfd[0]); exit(0); } if(pid>0){ close(pfd[0]); } } int j=1; char uzenet[256]; strcpy(uzenet,"start"); int ho=strlen(uzenet); while(j<=n){ if(write(pfd[1],&ho,sizeof(int))==-1){ perror("write error"); exit(1); } if(write(pfd[1],uzenet,ho*sizeof(char))==-1){ perror("write error"); […]