Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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字符串比较提供意外输出_Python_Subprocess - Fatal编程技术网

Python字符串比较提供意外输出

Python字符串比较提供意外输出,python,subprocess,Python,Subprocess,我试图比较两个变量: node\u最新版本-来自刮削 installed\u version-通过执行node-v并将值存储在变量上 执行时显示相同的值: print(node_latest_version) # prints v11.13.0 print(installed_version) # prints v11.13.0 但是当我试着比较两者时 if node_latest_version == installed_version: print('success') # No

我试图比较两个变量:

node\u最新版本
-来自刮削
installed\u version
-通过执行
node-v
并将值存储在变量上

执行时显示相同的值:

print(node_latest_version)
# prints v11.13.0

print(installed_version)
# prints v11.13.0
但是当我试着比较两者时

if node_latest_version == installed_version:
    print('success')
# No response
我试过:

if node_latest_version == 'v11.13.0':
   print('OK')
# this prints OK

if installed_version == 'v11.13.0':
   print('OK')
# NO RESPONSE

这是我的代码:

node_latest_version = results[1].attrs['data-version']

installed_version = subprocess.Popen("node -v",
                           shell=True,
                           stdout=subprocess.PIPE,
                           universal_newlines=True).communicate()[0]

print(node_latest_version)
print(installed_version)

if node_latest_version == installed_version:
   print('OK')
我希望比较两个值

在比较之前对两个字符串使用.strip()方法。 installed.strip()==latest.strip()

在比较前对两个字符串使用.strip()方法。 installed.strip()==latest.strip()

尝试此方法并比较:

node_latest_version = ''.join(x for x in node_latest_version if x.isdigit() or x == '.')
installed_version = ''.join(x for x in installed_version if x.isdigit() or x == '.')

if node_latest_version == installed_version:
   print('OK')
尝试以下方法并进行比较:

node_latest_version = ''.join(x for x in node_latest_version if x.isdigit() or x == '.')
installed_version = ''.join(x for x in installed_version if x.isdigit() or x == '.')

if node_latest_version == installed_version:
   print('OK')

如何获得
结果
?另外,尝试执行
print(repr(node\u latest\u version))
print(repr(installed\u version))
,这可能会显示它们有一些不同的字符。我怀疑其中一个包含换行符,而另一个不包含换行符。请小心打印字符串,这不会使您很容易注意到字符串中可能包含哪些特殊字符。改为使用
print(repr(…)
,这样您可以查看值中是否有换行符、尾随空格或其他不太容易发现的字符。
结果
来自于刮取,通过执行
print(repr())
我现在可以看到不同,
print(repr(node\u最新版本))
显示
'v11.13.0'
打印(repr(已安装版本))
显示
'v11.13.0\n'
和一个快速测试:
$python3-c'导入子流程;r=subprocess.run(“节点-v”,shell=True,stdout=subprocess.PIPE,text=True);打印(repr(r.stdout))”
生成
'v11.13.0\n'
\n
有一个换行符,当您打印出来并在打印下一项之前检查有多少空行时,很难发现它。如何获得
结果
?另外,尝试执行
print(repr(node\u latest\u version))
print(repr(installed\u version))
,这可能会显示它们有一些不同的字符。我怀疑其中一个包含换行符,而另一个不包含换行符。请小心打印字符串,这不会使您很容易注意到字符串中可能包含哪些特殊字符。改为使用
print(repr(…)
,这样您可以查看值中是否有换行符、尾随空格或其他不太容易发现的字符。
结果
来自于刮取,通过执行
print(repr())
我现在可以看到不同,
print(repr(node\u最新版本))
显示
'v11.13.0'
打印(repr(已安装版本))
显示
'v11.13.0\n'
和一个快速测试:
$python3-c'导入子流程;r=subprocess.run(“节点-v”,shell=True,stdout=subprocess.PIPE,text=True);打印(repr(r.stdout))”
生成
'v11.13.0\n'
\n
有一个新行,当你打印出来并在打印下一个项目之前检查有多少空行时,不太容易发现的东西。这是不必要的复杂,并且会产生误报,例如,如果一个是
11.2
,另一个是
1.12
1.1.2
。比较这两个项目的唯一方法是删除多余的代码人物。因此,要么使用正则表达式(甚至更复杂),要么使用其他过滤器。如果需要,您可以添加“或x==”。这是不必要的复杂,并且会产生误报,例如,如果一个是
11.2
,另一个是
1.12
1.1.2
。比较这两个字符的唯一方法是删除额外的字符。因此,要么使用正则表达式(甚至更复杂),要么使用其他过滤器。如果需要,可以添加`或x='.'。