我使用python3。这是我的脚本的一部分:
proc = subprocess.Popen(["git", "ls-remote", "--heads", "origin", "master"],stdout=subprocess.PIPE)
line = proc.stdout.readline()
if line != '':
print("not empty")
print(line)
else:
print(empty)
我想检查是否有远程主控。如果' line
'的内容不是空的(=有一个主人)它会打印"不是空的"。如果没有master =没有输出我想打印空。
但它不起作用:
这是没有python的输出:
$ git ls-remote --heads origin xxx (no output)
$ git ls-remote --heads origin master (output)
a5dd03655381fcee94xx4e759ceba7aeb6456 refs/heads/master
这是我运行脚本时的输出:
b'a5dd03655381fcee94xx4e759ceba7aeb6456\trefs/heads/master\n'
master不存在:
b''
我该如何使这项工作?似乎管道似乎采用了不同的标志,如b''
和\n
,而不仅仅是单词。
答案 0 :(得分:2)
您将获得二进制字符串作为输出;许多程序执行内部解码并向您显示文本字符串,但subprocess.Popen
不是其中之一。
但你可以自己轻松解码:
out_bin = b'a5dd03655381fcee94xx4e759ceba7aeb6456\trefs/heads/master\n'
out_txt = out.decode('utf-8') # Should be `utf-8` encoded
\t
和\n
是标签和换行符,它们会在print
时执行相应的格式设置。
此外,文本字符串的所有方法也适用于二进制字符串,它只是不同的实现/表示。
此外,在if line != '':
条件下,您需要通过以下方式明确告知您与二进制字符串匹配:
if line != b'':
或者更好,因为Python中的空字符串是假的,只需执行:
if not line: