如何从字符串末尾删除逗号?我试过了
awk = subprocess.Popen([r"awk", "{print $10}"], stdin=subprocess.PIPE)
awk_stdin = awk.communicate(uptime_stdout)[0]
print awk_stdin
temp = awk_stdin
t = temp.strip(",")
也尝试了t = temp.rstrip(",")
,两者都无效。
这是代码:
uptime = subprocess.Popen([r"uptime"], stdout=subprocess.PIPE)
uptime_stdout = uptime.communicate()[0]
print uptime_stdout
awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE)
awk_stdin = awk.communicate(uptime_stdout)[0]
print repr(awk_stdin)
temp = awk_stdin
tem = temp.rstrip("\n")
logfile = open('/usr/src/python/uptime.log', 'a')
logfile.write(tem + "\n")
logfile.close()
这是输出:
17:07:32 up 27 days, 37 min, 2 users, load average: 5.23, 5.09, 4.79
5.23,
None
Traceback (most recent call last):
File "uptime.py", line 21, in ?
tem = temp.rstrip("\n")
AttributeError: 'NoneType' object has no attribute 'rstrip'
答案 0 :(得分:7)
呃,这个古老的人怎么样:
if len(str) > 0:
if str[-1:] == ",":
str = str[:-1]
第二个想法,rstrip
本身应该可以正常工作,所以有一些关于你从awk
获得的字符串的东西并不是你所期望的。我们需要看到这一点。
我怀疑是因为你的字符串实际以逗号结尾。当你跑:
str = "hello,"
print str.rstrip(",")
str = "hello,\n"
print str.rstrip(",")
print str.rstrip(",\n")
输出是:
hello
hello,
hello
换句话说,如果字符串末尾有换行符和逗号,则您需要rstrip
两个字符",\n"
。
好的,根据您的评论,这是您正在尝试的内容:
uptime = subprocess.Popen([r"uptime"], stdout=subprocess.PIPE)
uptime_stdout = uptime.communicate()[0]
print uptime_stdout
awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE)
awk_stdin = awk.communicate(uptime_stdout)[0]
print repr(awk_stdin)
temp = awk_stdin
tem = temp.rstrip("\n")
logfile = open('/usr/src/python/uptime.log', 'a')
logfile.write(tem + "\n")
logfile.close()
您从两个print
语句中实际获取的内容以及附加到日志文件的内容是什么?
我的特定uptime
<{1}}
$11
但你的可能会有所不同。
但是,我们需要查看脚本的输出。
答案 1 :(得分:6)
当你说
时awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE)
awk_stdout = awk.communicate(uptime_stdout)[0]
然后将awk进程的输出打印到stdout(例如终端)。
awk_stdout
设置为None
。 awk_stdout.rstrip('\n')
提出AttributeError
,因为None
没有名为rstrip
的属性。
当你说
时awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
awk_stdout = awk.communicate(uptime_stdout)[0]
然后没有任何内容打印到stdout(例如终端),awk_stdout
将awk
命令的输出作为字符串。
答案 2 :(得分:2)
删除字符串末尾的所有逗号:
str = '1234,,,'
str = str.rstrip(',')
答案 3 :(得分:1)
我认为您会发现awk_stdin
实际上以换行符结束(print repr(awk_stdin)
以清楚地显示),因此您需要先删除 rstrip'ping逗号(或者,你可以同时使用RE做两个,但基本的想法是逗号不是实际上是该字符串中的最后一个字符! - 。)。
答案 4 :(得分:0)
如果您有空格/非打印字符,请尝试以下方法:
a_string = 'abcdef,\n'
a_string.strip().rstrip(',') if a_string.strip().endswith(',') else a_string.strip()
省去了检查字符串长度和计算切片索引的麻烦。
当然,如果您不需要为不以逗号结尾的字符串做任何不同的事情,那么您可以这样做:
a_string.strip().rstrip(',')