我正在使用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())
有什么想法会导致这种情况吗?为什么呢?
答案 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=True
和stdout
来合并。{p>