英文:
Docker / terminal command in a juypter notebook cell
问题
我正在尝试在Juypter Notebook中运行这个Docker函数:
subprocess.run(["docker", "run", "--rm", "-t", "--name", "stream", "-v", "/home/benson/OCR_project:/user-data/", "--user", "id -u:`id -g`", "-e", f"LICENSE_KEY={license_key}", "-e", f"TOKEN={token}", "platerecognizer/alpr-stream"])
这是来自此网站的:https://platerecognizer.com/
我尝试在while循环中执行此操作,但是当我尝试运行子进程时,即使只是在while循环之外的Juypter笔记本单元格中检查其工作情况,我都会收到以下错误:
CompletedProcess(args=['docker', 'run', '--rm', '-t', '--name', 'stream', '-v', '/home/benson/OCR_project:/user-data/', '--user', 'id -u:`id -g`', '-e', 'LICENSE_KEY=sB6WCDvshT', '-e', 'TOKEN=80cc7ff865e421cde42a2df9ae165f5f5482b5a5', 'platerecognizer/alpr-stream'], returncode=125)
125表示错误,什么都不运行,但我正在寻求一些建议。我不太熟悉在Juypter中运行终端命令和while循环。
英文:
I am trying to run this docker function in Juypter Notebook:
subprocess.run(["docker", "run", "--rm", "-t", "--name", "stream", "-v", "/home/benson/OCR_project:/user-data/", "--user", "id -u:`id -g`", "-e", f"LICENSE_KEY={license_key}", "-e", f"TOKEN={token}", "platerecognizer/alpr-stream"])
Which is from here: https://platerecognizer.com/
I am trying to do this in a while loop, but when I try and run the subprocess, even just in a Juypter notebook cell outside of the while loop to check its working, I get this error:
CompletedProcess(args=['docker', 'run', '--rm', '-t', '--name', 'stream', '-v', '/home/benson/OCR_project:/user-data/', '--user', 'id -u:`id -g`', '-e', 'LICENSE_KEY=sB6WCDvshT', '-e', 'TOKEN=80cc7ff865e421cde42a2df9ae165f5f5482b5a5', 'platerecognizer/alpr-stream'], returncode=125)
125 means error, and nothing runs, but I was looking for some guidance. I'm not very fluent with running terminal commands in Juypter and a while loop.
答案1
得分: 2
gid = os.getegid()
uid = os.geteuid()
subprocess.run(["docker", "run", "--rm", "-t", "--name", "stream", "-v", "/home/benson/OCR_project:/user-data/", "--user", f"{uid}:{gid}", "-e", f"LICENSE_KEY={license_key}", "-e", f"TOKEN={token}", "platerecognizer/alpr-stream"])
英文:
Your problem is with:
"--user", "id -u:`id -g`"
This looks like an attempt to retrieve your UID and GID using the commands id -u
and id -g
. The id -g
is enclosed in back ticks, which are used to tell the shell to execute the enclosed command and then replace the command with the command's output. For this to work, the id -u
would also need to be enclosed in back ticks. However you are not executing the command from a shell. You can use two more python commands to get the UID and GID and then pass them to the subprocess.run(...)
command:
import os
import subprocess
gid = os.getegid()
uid = os.geteuid()
subprocess.run(["docker", "run", "--rm", "-t", "--name", "stream", "-v", "/home/benson/OCR_project:/user-data/", "--user", f"{uid}:{gid}", "-e", f"LICENSE_KEY={license_key}", "-e", f"TOKEN={token}", "platerecognizer/alpr-stream"])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论