python - 使用 pdsh 通过 linux 解析内联 python 命令

标签 python linux parsing parallel-processing inline

因此,我尝试从 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/

相关文章:

linux - 权限错误 : [Errno 13] Permission denied: '/home/max_gmail_com/yourubl/pyenv'

linux - 如何在 Linux UVC 驱动程序中启用 UVC_QUIRK_FIX_BANDWIDTH 怪癖?

java - 日期到字符串解析

c++ - 将边列表解析为结构 vector

c++ - 解析 GLSL 着色器字符串以在 Android NDK 中查找变量名称

python - 命令行 : Show list of options and let user choose

python - 将数组从 c 传输到 python

c++ - 如何使用 sigsegv 捕获内存读取和写入?

python - 在 Django 的 Queryset 中过滤 django-taggit 的标签

python - groupby 多个值列