Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在bash脚本中重定向输出_Python_Linux_Bash_Redirect - Fatal编程技术网

Python 在bash脚本中重定向输出

Python 在bash脚本中重定向输出,python,linux,bash,redirect,Python,Linux,Bash,Redirect,我有一个bash脚本,它运行以下内容: python myscript.py --input=/path/file --someOption=value > /path/file 如果我在没有重定向的情况下运行它,一切正常。如果我使用重定向运行它,文件将被截断。我怀疑python正在执行整行代码,包括重定向,而实际上,重定向必须由bash执行 我试过: exec python myscript.py-input=/path/file-someOption=value,但我得命令找不到错误

我有一个bash脚本,它运行以下内容:

python myscript.py --input=/path/file --someOption=value > /path/file
如果我在没有重定向的情况下运行它,一切正常。如果我使用重定向运行它,文件将被截断。我怀疑python正在执行整行代码,包括重定向,而实际上,重定向必须由bash执行

我试过:

exec python myscript.py-input=/path/file-someOption=value,但我得命令找不到错误


如何让python只执行python部分,并让bash执行重定向?

您不能同时读取和写入同一个文件

将输出重定向到临时位置,然后覆盖输入:

if python myscript.py --input=/path/file --someOption=value > /path/file.tmp
then
  mv /path/file.tmp /path/file
fi

问题是您使用的文件与输入和输出的文件相同。Shell首先打开重定向的文件,文件变为空。然后,python脚本读取空文件

使用三通可以很容易地解决这个问题


python没有执行重定向,shell正在执行重定向,是的,它在运行命令之前执行了重定向。我不知道你期望exec会做什么。我以为python会读入文件,处理它,将结果打印到stdout,然后在输出重定向的点终止。@ventsyv,重定向发生在命令启动之前;在本例中,它运行命令,并将其fd1写入已被截断的/path/file索引节点。因为它已经被截断了,所以显然无法从那里读取输入;您只是使用了一个不同的输出文件,它也可以用于简单的重定向。这是我以前的答案。有人已经报道过了,我提到了tee
python myscript.py --input=/path/file --someOption=value | tee /path/otherfile