我试图通过扭曲开始一个过程。我正在使用以下结构解析JSON文件,其中包含多个命令:
{
"key" : "test",
"cmd" : "cat",
"args" : "/opt/vinci/rxDaemons.json | grep cmd",
"restart" : 5,
"auto" : 0
}
我正在尝试的命令非常简单;我在文件中搜索术语“cmd”(我相信你可以选择)
我用来生成进程的代码如下:
cmd, args, uid, gid, env = self.processes[name]
proto = LoggingProtocol()
proto.service = self
proto.name = name
self.protocols[name] = proto
self.timeStarted[name] = self._reactor.seconds()
newArgs = str(cmd).split() + args.split()
self._reactor.spawnProcess(proto, str(cmd), args=newArgs, env=env, uid=uid, gid=gid )
回复是:
cat: |: No such file or directory
cat: grep: No such file or directory
cat: cmd: No such file or directory
它然后猫整个文件
我假设我们在每个args上运行cat但我不知道为什么
如何在spawnProcess中正确使用多个arg?
答案 0 :(得分:3)
问题是|
不是cat
的参数,而是part of bash
。在POpen
中,您可以向命令添加shell=True
,但在Twisted中似乎不可用。 “正确”的解决方案可能是在Twisted中实现管道,而不是在bash中。
编辑:实际上在你的情况下,这是"useless use of cat
",只需运行此命令:
grep cmd /opt/vinci/rxDaemons