我有一个批处理系统,可以按顺序执行许多命令。这些命令被指定为单词列表,这些单词由python的subprocess.call()
函数使用外壳程序不执行。由于各种原因,我不想更改处理系统。
我想在文件中写一些东西,以便随后的命令可以使用它。不幸的是,我想到的将所有内容写到磁盘的所有方式都涉及某种重定向,这是一个shell概念。
因此,有一种方法可以编写Linux命令行,使其在外壳程序外部执行的情况下将其参数写入文件中?
答案 0 :(得分:1)
嗯,可以编写一个通用的解析器和进程管理器来为您处理此问题,但是幸运的是,Linux已经附带了一个。您所要做的就是告诉它要运行什么命令,它将为您处理重定向。
因此,如果您要稍微修改命令,则可以轻松地做到这一点。只需将单词和字符串连接在一起,并在其中包含空格或其他特殊字符的情况下引用即可,然后您可以使用以下列表:
/bin/sh
,-c
,{your new string here} > /some/file
等等,将内容写入磁盘。 :)
答案 1 :(得分:0)
查看subprocess.call的文档,我发现它具有额外的参数:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
如果您为打开的文件指定stdout=
,那么代码的输出将进入该文件,基本上是相同的行为?
我看不到您的确切使用情况,但这肯定是一种在不更改代码的情况下综合命令行管道行为的方法。
请注意,文档还说您不应使用内置的= PIPE支持,具体取决于您的确切要求。请务必定期从管道读取数据,否则缓冲区已满时写入器将停顿。