在 python 脚本中执行命令后需要逐行输出列表
Need an output line by line as list after executing commands inside python script
当我在 python 脚本中执行命令时:
import os
import re
tes=list()
tes=os.system('p4 nc files @=4596830')
for line in tes:
line2=re.findall('//depot/prod/DOT/dev/\w+((?:/\w*)*\.c)',line)
print(line2)
我得到的输出为:
//depot/prod/DOT/dev/freebsd/10/sys/dev/nvme/nvme.c#16 - edit change 4596830 (text)
//depot/prod/DOT/dev/mgmtgateway/src/tables/card.smf#12 - edit change 4596830 (text)
//depot/prod/DOT/dev/ontap/prod/driver/scsi/pmcsas_init.c#81 - edit change 4596830 (text)
TypeError: 'int' object has no attribute '__getitem__'
但我只需要以 .c 扩展名结尾的文件:
/freebsd/10/sys/dev/nvme/nvme.c
/ontap/prod/driver/scsi/pmcsas_init.c
os.system
returns 调用的状态代码,而不是 STDOUT, STDERR
流。 Python 不知道如何遍历整数,因此引发异常。
您可以尝试使用 subprocess
和管道 STDOUT, STDERR
到自定义流,然后将其转换为 list
.
import subprocess
call = subprocess.Popen("p4 nc files @=4596830", stdout=subprocess.PIPE)
stdout = call.communicate()[0]
files = stdout.split("\n")
这可能对您有所帮助
import os
import re
tes=list()
tes=os.system('p4 nc files @=4596830')
for line in tes:
#line2=re.findall('//depot/prod/DOT/dev/\w+((?:/\w*)*\.c)',line)
if ".c" in line:
print(line)
当我在 python 脚本中执行命令时:
import os
import re
tes=list()
tes=os.system('p4 nc files @=4596830')
for line in tes:
line2=re.findall('//depot/prod/DOT/dev/\w+((?:/\w*)*\.c)',line)
print(line2)
我得到的输出为:
//depot/prod/DOT/dev/freebsd/10/sys/dev/nvme/nvme.c#16 - edit change 4596830 (text)
//depot/prod/DOT/dev/mgmtgateway/src/tables/card.smf#12 - edit change 4596830 (text)
//depot/prod/DOT/dev/ontap/prod/driver/scsi/pmcsas_init.c#81 - edit change 4596830 (text)
TypeError: 'int' object has no attribute '__getitem__'
但我只需要以 .c 扩展名结尾的文件:
/freebsd/10/sys/dev/nvme/nvme.c
/ontap/prod/driver/scsi/pmcsas_init.c
os.system
returns 调用的状态代码,而不是 STDOUT, STDERR
流。 Python 不知道如何遍历整数,因此引发异常。
您可以尝试使用 subprocess
和管道 STDOUT, STDERR
到自定义流,然后将其转换为 list
.
import subprocess
call = subprocess.Popen("p4 nc files @=4596830", stdout=subprocess.PIPE)
stdout = call.communicate()[0]
files = stdout.split("\n")
这可能对您有所帮助
import os
import re
tes=list()
tes=os.system('p4 nc files @=4596830')
for line in tes:
#line2=re.findall('//depot/prod/DOT/dev/\w+((?:/\w*)*\.c)',line)
if ".c" in line:
print(line)