因此,我尝试从 python 脚本发出此命令,该脚本收集集群中预定数量的节点的 cpu 信息。这里我使用扇出为 2,并且仅在节点 b127 到 b129 上运行它以进行测试。
pdsh -f2 -w b[127-129] 'python -c "import multiprocessing
num_cpu = multiprocessing.cpu_count()
stat_fd = open('/proc/stat')
stat_fd.close()"'
我打印了命令,这就是它在终端上显示的内容。因此,告诉我引号和命令的格式正确。我通过执行以下代码获取该字符串:
python_command = "'python -c "\
+ "\"import multiprocessing\n"\
+ "num_cpu = multiprocessing.cpu_count()\n"\
+ "stat_fd = open(\'/proc/stat\')\n"\
+ "stat_fd.close()\"'"
command = "pdsh -f2 -w b[127-129] " + python_command
print command
不幸的是,带有 open(\'/proc/stat\') 的行似乎是问题所在,因为这是唯一导致解析器因嵌套单引号而失败的行。我尝试了多种引用和转义的组合,以使其不起作用。我在文件打开和关闭之间省略了一些代码,以最大限度地减少发布的代码。
我四处搜寻,发现了这个link ,但发现这个例子太简单了,因为我可以复制这些命令。是的,我知道我可以使用 bash 命令来完成我想要完成的事情,而且我最终可能会这样做,但是这个命令让我头疼不已。我还有使用 top 和 ps 收集数据的脚本,因此我不需要使用它们进行解释。我非常感谢您提前提供的帮助。
最佳答案
试试这个:
python_command = """pdsh -f2 -w b[127-129] 'python -c "import multiprocessing
num_cpu = multiprocessing.cpu_count()
stat_fd = open(\\"/proc/stat\\")
stat_fd.close()"'"""
在 Python 中,您可以对包含换行符和单/双引号的字符串使用三引号("""..."""
或 '''...'''
)。
最后一级引号(在 open()
行上)需要转义,以便它们不会与外部引号冲突。您还需要转义反斜杠,以便 Python 在解释字符串时不会立即使用它们:\\"
。
关于python - 使用 pdsh 通过 linux 解析内联 python 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563614/