如何从存储在文件中的进程列表中运行第一个进程,并立即删除第一行,就好像该文件是一个队列,我称之为“stream行”?
我想用简单的文本文件中列出的第一个命令用 n作为分隔符,用stream行的方式:
图1:
cmdqueue.lst : proc_C1 proc_C2 proc_C3 . .
图2:
信号在C中排队
奇怪的阻塞行为与python多处理队列put()和get()
Windows c + +线程等待队列数据推送
Linux:如何在后台排列一些作业?
丢弃传入的UDP数据包而不读取
通过popcmdpopup第一个命令:
proc_A | proc_B | popcmd cmdqueue.lst | proc_D
图3:
cmdqueue.lst : proc_C2 proc_C3 proc_C4 . .
我应该传递哪个文件作为ftok()的path名参数
在C中为* nix创build线程安全定时队列
lftp + bash脚本+variables
Python 3.6:“AttributeError:'SimpleQueue'对象没有属性'_poll'”
正确的队列线程技术在C#?
pop-cmd.py:
#!/usr/bin/env python import os,shlex,sys from subprocess import call filename = sys.argv[1] lines = open(filename).readlines() if lines: command = lines[0].rstrip() open(filename,"w").writelines(lines[1:]) if command: sys.exit(call(shlex.split(command) + sys.argv[2:]))
例:
proc_A | proc_B | python pop-cmd.py cmdstack.lst | proc_D
哦,这是一个有趣的单线。
好的,这是交易。 你想要的是一个程序,当被调用时,将文件的第一行打印到标准输出,然后从文件中删除该行。 听起来像sed(1)的工作 。
尝试
proc_A | proc_B | `(head -1 cmdstack.lst; sed -i -e '1d' cmdstack.lst)` | proc_D
我确信已经有咖啡的人可以改变sed程序,不需要head(1)调用,但是这个工作,并且使用子shell(“(foo)”)在子进程中运行。 )
我假设你也一直附加到文件,所以重写文件会使你有覆盖数据的危险。 对于这种类型的任务,我认为你会更好地使用单个文件的每个队列条目,使用日期/时间来确定顺序,然后当你处理每个文件,你可以将数据附加到日志文件,然后删除触发文件。
确实需要更多信息才能提出一个好的解决方案。 知道文件如何更新很重要。 是一个独立的过程,只有一个过程等等
我想你需要重写这个文件 – 比如运行一个命令列出所有行,但是首先把它写到一个临时文件中,然后重命名为原始文件。 这可以使用tail或awk或perl完成,具体取决于您可用的命令。
如果你想像堆栈一样处理一个文件,那么更好的方法是将堆栈的顶部放在文件的末尾。
因此,您可以在最后一行(= pop)的开始处轻松切断文件,并在您按下时简单地附加到文件。
你可以使用一个小bash脚本; 命名为“popcmd”:
#!/斌/庆典
cmd =`head -n 1 $ 1`
tail -n +2 $ 1>〜tmp〜
mv -f〜tmp〜$ 1
$ CMD
编辑:像查理·马丁(Charlie Martin)展示的那样,在中间两行使用sed当然要优雅得多:
#!/斌/庆典
cmd =`head -n 1 $ 1`
sed -i -e'1d'$ 1
$ CMD
编辑:您可以完全按照您的示例使用代码使用它:
proc_A | proc_B | popcmd cmdstack.lst | proc_D
你不能写入一个文件的开始,所以切出第1行将是很多工作(重写文件的其余部分(这实际上并没有太多的程序员的工作(这是每个其他答案职位为你写:))))。
我建议保持整个事情在内存中,并使用经典的堆栈,而不是一个文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。