如何解决如何将文本发送到 python 之外的一些 bash 命令?
我有脚本可以做一些工作:
python the_script.py
此脚本完成后,我想 cd
进入脚本创建的目录并在那里执行 bash 操作。
我想实现这一目标:
python the_script.py | cd
我试过了
sys.stdout.wrte("directory_name")
,但它不起作用。
我可以创建一个变量 a 然后使用它,但这不是我问这个问题的重点,我想知道如何使用 python 将内容通过管道传输到其他命令并执行 python+bash
脚本。
解决方法
试试cd "$(python the_script.py)"
。
-
$(...)
部分将是the_script.py
的输出。 - 然后
"..."
将引用输出,以安全地处理包含空格的文件夹名称。
像 some_command | cd
这样的结构本身没有任何意义,因为 cd
忽略了标准输入。此外,您的方法存在一个问题,即它依赖于 Python 程序的标准输出必须仅包含目录名称而不包含其他信息的事实。一旦您向标准输出 (print "something"
) 写入其他内容,您的程序就会中断。
如果 the_script.py
自行决定创建哪个目录是必要,请将目录名称写入某个文件而不是 stdout,然后在您的 bash 脚本中处理该文件脚本完成后。在这种情况下,我会让调用者通过环境变量定义文件名:
export file_holding_name_for_new_directory=$PWD/foo.$$
python the_script.py
if [[ -f $file_holding_name_for_new_directory ]]
then
cd $(<$file_holding_name_for_new_directory)
rm $file_holding_name_for_new_directory
# ... any further processing
else
: # error in the_script.py
fi
在 the_script.py 中,创建目录,如果成功,则获取环境变量的内容,创建该名称的文件并将目录名称写入该文件。
当然,通过环境变量传递这个文件的名称只是一种方法。另一种可能性是在命令行上传递这个名称:
file_holding_name_for_new_directory=$PWD/foo.$$
python the_script.py $file_holding_name_for_new_directory
if [[ -f $file_holding_name_for_new_directory ]]
then
cd $(<$file_holding_name_for_new_directory)
rm $file_holding_name_for_new_directory
# ... any further processing
else
: # error in the_script.py
fi
您采用哪种方法,取决于品味。
,您可能希望使用 os module 自动更改位置
到新目录和 subprocess module 以直接从 bash
脚本运行 python
命令,如下所示:
import os
import subprocess as sp
os.chdir('your directory')
sp.run(['ls','-l'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。