Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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转义sed和bash命令及子进程_Python_Bash_Sed_Subprocess - Fatal编程技术网

Python转义sed和bash命令及子进程

Python转义sed和bash命令及子进程,python,bash,sed,subprocess,Python,Bash,Sed,Subprocess,问题: 如何成功地将sed与python结合使用?我必须在远程服务器上运行此命令才能获得逗号分隔的主机列表。当从bash运行时,我得到了我想要的东西,比如host1、host2、host3 以下是我所拥有的: process = subprocess.Popen(["ssh $USER@mychefserver knife search node "chef_environment:*" | grep -i "node name" | egrep -i "stuff|ruff" | uniq -

问题:

如何成功地将sed与python结合使用?我必须在远程服务器上运行此命令才能获得逗号分隔的主机列表。当从bash运行时,我得到了我想要的东西,比如host1、host2、host3

以下是我所拥有的:

process = subprocess.Popen(["ssh $USER@mychefserver knife search node "chef_environment:*" | grep -i "node name" | egrep -i "stuff|ruff" | uniq -u | sort -n | cut -d ":" -f 2 | sed -e 's/^[ \t]*//' | tr '\n' ', '
"], shell=False, stdout=PIPE)

我知道我将不得不逃离\n、\t等,但其余的我都有麻烦。每当我尝试从Python脚本运行它时,我都会因为无效语法而得到一个错误,尽管我尝试了大量的转义

当您在双引号字符串中使用
时,字符串引号会被打断。您必须像
\”
一样转义
。进一步注意,命令行中的大多数双引号都可以被单引号
替换。以下代码应该可以工作:

process = subprocess.Popen(["ssh $USER@mychefserver knife search node \"chef_environment:*\" | grep -i 'node name' | egrep -i 'stuff|ruff' | uniq -u | sort -n | cut -d':' -f 2 | sed -e 's/^[ \t]*//' | tr '\n' ', '"], shell=False, stdout=subprocess.PIPE)

SyntaxError:EOL在扫描字符串Literal时只是为了防止滚动条。现在它应该按原样工作,但可读性较差。