我有一个python
脚本,它将文件列表打印到stdout,例如:
$ ./myscript.py
"file a.txt" "file b.txt" "file c.txt"
我想用更少的时间打开这些文件
$ less <(./myscript.py)
但我得到了以下错误:
-bash: /dev/fd/63: Permission denied
$ Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe
我认为这可能和@Jon Clements在 grep: broken pipe error python 2.2,也就是说,管道完工了;但我不确定。我也尝试过@chepnerstore return value of a Python script in a bash script的解决方案(可能不正确),但它给出了相同的错误。在
我该怎么解决这个问题?我知道混合使用BASH和Python是不好的做法。在
顺便说一句,python脚本正在使用围绕以下语句的循环来生成文件名列表:
print('"'+filename+'"',sep=" ",end=' ',)
另外,当我手动将输出复制并粘贴到less
时,它可以正常工作。在
In
bash
<
意味着将文件作为标准输入重定向,而python脚本不是文件。在您可以改为使用
./myscript.py | less
。在在文件名周围加引号是没有帮助的。你应该做的是
xargs -0
。在除非以某种方式使用
eval
,否则引用文件名是没有帮助的,出于安全原因,这不是一个好主意。你的命令应该看起来像作为一种破解方法,如果文件名很简单(即没有空格,没有glob字符),您可以修改
^{pr2}$./myscript.py
以只输出空格分隔的文件名(没有引号),然后运行因为
less
只接受文件名参数。在相关问题 更多 >
编程相关推荐