当前位置: 首页 > 面试题库 >

在subprocess.call中使用大于运算符

丌官坚秉
2023-03-14
问题内容

我想做的很简单。我想使用python的subprocess模块调用以下命令。

cat /path/to/file_A > file_B

该命令可以简单地工作并将其内容复制file_Afile_B当前工作目录中。但是,当我尝试subprocess在脚本中使用模块调用此命令时,会出错。以下是我在做什么:

import subprocess

subprocess.call(["cat", "/path/to/file_A", ">", "file_B"])

我收到以下错误:

cat: /path/to/file_A: No such file or directory
cat: >: No such file or directory
cat: file_B: No such file or directory

我究竟做错了什么 ?如何在子流程模块call命令中使用大于运算符


问题答案:

>输出重定向是一个 shell
功能,但是subprocess.call()带有args列表并且shell=False(默认)不使用shell。

您必须shell=True在这里使用:

subprocess.call("cat /path/to/file_A > file_B", shell=True)

或更妙的是,用于subprocess将命令的输出重定向到文件:

with open('file_B', 'w') as outfile:
    subprocess.call(["cat", "/path/to/file_A"], stdout=outfile)

如果您只是复制文件,请使用shutil.copyfile()函数让
Python在以下位置 复制文件:

import shutil

shutil.copyfile('/path/to/file_A', 'file_B')


 类似资料:
  • 最近,我一直在处理一些紧凑的代码,我试图得到一个非常奇怪的尽可能小的循环。 我知道我可以让循环工作,比如一个if/ther语句,但是我正在寻找一种更小的方法来做到这一点,因为这使得代码大了两倍(更长的“循环”)。 那么是的,有什么办法可以做到这一点吗?还是我一直在用一个不同的角色做两个不同的循环?提前谢谢

  • 问题内容: Swift 1.1包含〜>运算符的声明: 这在Swift中有什么用?它似乎已声明,但未定义任何可利用它的函数。其他开发人员已将其用于响应模式和封送队列之间的封包,但我想知道为什么在标准框架中对其进行了定义。我猜想它可以“保留”一个自定义运算符供开发人员使用,因为它具有最高的优先级。 问题答案: 由于Swift是开源的,我们可以看到将stdlib 包括在内的实际原因:作为Swift 1.

  • 问题内容: 不知道这是怎么回事。这是来自phpMyAdmin的查询: 但我始终获得返回表中的所有记录,包括那些起始日期为2012-11-01的记录。是什么赋予了? 问题答案: 您迷上了单引号导致它变成字符串,请改用 SQLFiddle演示

  • 问题内容: 我注意到最近有一段代码直接比较两个整数列表,如下所示: 这似乎有点奇怪,但我想如果所有元素都大于,它将返回,如果每个元素相等或元素大于则返回False 。所以我测试了它: 好的,行得通。和: 但是当它变得更加模糊时: 要么: 结果有点陌生。python实际在做什么?看来它返回的结果偏向于第一个列表,其中最左边的元素大于相应的元素? 问题答案: 从比较序列和其它类型在Python教程:

  • 这可能是一个愚蠢的问题,但看看操作符到函数的映射,我注意到没有函数来表示

  • 问题内容: 我只想做这样的事情: 问题答案: 如果您使用的是freemarker 2.3.23或更高版本,则可以使用内置的: 如果您使用的是较早版本的freemarker,则可以改用内置的: 当应用于布尔值时,内置函数将充当三元运算符。