首页 > 解决方案 > 在远程服务器上执行 tensorflow python3,子进程无法解释所有 tensorflow 输入 args。ImportError:没有名为“脚本”的模块

问题描述

我正在尝试从我的本地主机在远程服务器上执行 tensorflow 图像识别。我的本地机器有一个脚本,它运行这个子进程 ssh 命令来在远程服务器上执行脚本。

stdoutdata = subprocess.getoutput('sshpass -p \'mypassword\' ssh root@myserverIP "python3 ../var/www/html/tensorflowScreenStatus/getScreenStatus.py"')

我可以让脚本运行并将输出返回到我的本地脚本没有问题。在服务器端脚本中,我有一个 python 子进程为 tensorflow 运行相同的终端命令来筛选图像,当我在远程机器上手动运行它时,它工作正常。

当从我的本地脚本执行服务器端脚本时,python 不知道如何处理 tensorflow 的参数。

导致错误的服务器端命令

stdoutdata = subprocess.getoutput("sudo python3 -m scripts.label_image --graph=tf_files/retrained_graph.pb --image=asdfsfsd.jpg") print("stdoutdata: " + stdoutdata)

错误:

/usr/bin/python3: Error while finding spec for 'scripts.label_image' (ImportError: No module named 'scripts')

scripts.label_image 是 tensorflow 了解如何处理的命令中的 arg。就好像通过在子进程中运行 tensorflow 命令,python 忘记让 tensorflow 读取它一样。如果我通过 ssh 到远程服务器手动运行相同的命令,它可以正常工作。

我什至不知道如何称呼这种错误。就好像 python3 仍然可以运行但忘记了它在子进程中运行时默认 args 的含义。

任何帮助都将不胜感激。

标签: python-3.xtensorflowsshsubprocess

解决方案


感谢 Samuel Dion-Girardeau 和 nhubbard 试一试。但是,我找到了解决方案。我将错误解释为意味着 python 不知道如何将 scripts.label_image 目录作为路径读取,而是在子进程中运行命令时将其作为要导入的模块读取。

这是不正确的。Python 不知道如何读取 scripts.label_image 目录,所以我像这样修改了命令。

stdoutdata = subprocess.getoutput('sshpass -p \'password\' ssh root@ipaddress "python3 ../var/www/html/tensorflowScreenStatus/label_image.py --graph=../var/www/html/tensorflowScreenStatus/tf_files/retrained_graph.pb --image=../var/www/html/tensorflowScreenStatus/asdfsfsd.jpg"')

我将 label_image.py、jpg 从脚本移到父目录中,为这些文件夹设置完整目录。我还取出了服务器上的中间脚本,所以现在我的本地脚本在本地运行这个 ssh 命令,远程运行 tensorflow 命令,然后返回结果,所以实际上只需要一个脚本。

感谢您的帮助。


推荐阅读