python-3.x - 在远程服务器上执行 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 的含义。
任何帮助都将不胜感激。
解决方案
感谢 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 命令,然后返回结果,所以实际上只需要一个脚本。
感谢您的帮助。
推荐阅读
- node.js - 无法从 mongodb 检索数据到 Node JS
- firebase-dynamic-links - Firebase 动态链接 REST API 中未记录的参数
- c# - 使用 Task.Factory.StartNew 方法时,TaskCreationOptions.LongRunning 是长期和周期性运行作业的正确选择吗?
- python - 如何使用正则表达式删除字符串上嵌套文本周围的图案文本?
- xpath - 尽管使用 [ ] 指定了项目,但 Xpath 表达式仍拉取多个项目
- mysql - 根据结果从查询中返回值
- google-maps-api-3 - 如何让方向文本面板检测出行方式?
- php - 使用 NGINX 配置管理员:“上游 php 中没有端口”错误
- python - 按字母顺序排序数据框的索引
- swift - 如果轨道不是从头开始的,如何使用循环(缓冲类型 = .always 在 AKPlayer 中)