Paramiko exec_command挂在docker exec上

时间:2019-05-02 20:06:56

标签: python python-3.x docker apache-spark paramiko

我正在使用Paramiko从外部系统测试docker命令(我需要这样做,我不能只是构建容器并在本地对其进行测试),而我要运行的测试用例涉及启动Apache Spark和运行示例之一,特别是SparkPi。由于某种原因,我的python脚本挂在下面的docker exec ...命令上。但是,以前执行其他docker exec并没有遇到任何手动运行一切的问题。仅当我将所有内容都放入脚本时,它才会中断。

命令

stdin, stdout, stderr = ssh_client.exec_command(f'docker exec {spark_container_id} bash -c \'"$SPARK_HOME"/bin/spark-submit --class org.apache.spark.examples.SparkPi \
                --master spark://$(hostname):7077 "$SPARK_HOME"/examples/jars/spark-examples_2.11-2.1.1.jar {self.slices_to_calculate}\'')
print("\nstdout is:\n" + stdout.read() + "\nstderr is:\n" + stderr.read()) 

有什么想法会导致这种情况吗?为什么呢?

1 个答案:

答案 0 :(得分:0)

发现这样做的原因是因为我没有get_pty=True的{​​{1}}参数。在某些情况下,必须通过将端子附加到exec_command命令来正确打印输出。因此,解决方案将是

spark-submit

注意:通过使用stdin, stdout, stderr = ssh_client.exec_command(f'docker exec -t {spark_container_id} bash -c \'"$SPARK_HOME"/bin/spark-submit ...', get_pty=True) 中的get_pty=Truestdout来合并。{​​p>