无法在我的 colab python 代码中使用子流程
Unable to use subprocess in my colab python code
作为我正在使用 Yolov4 进行的项目的一部分,我正在尝试使用学习的权重测试多个图像,并将添加了边界框的结果图像复制到我的 google 驱动器。
以下是我 运行ning 在 colab 上的代码。
它只是不工作,并且没有要调试的日志消息。如果我直接在 cmd 变量中 运行 命令,请不要这样做,它工作正常,但这只是针对一张图像。
我的目标是自动化或“批量”测试过程。
感谢您的帮助。
#%%capture
import os,sys
import subprocess
directory = '/content/darknet/data/testimages/'
for filename in os.listdir(directory):
#cmd = "./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
cmd = "!./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
try:
subprocess.run([sys.executable,cmd])
except:
print("failed")
#print(os.path.join(directory, filename))
cmd = "!cp 'predictions.jpg' '/mydrive/birds/results/" + filename + "_results.jpg' "
#print(cmd)
#cmd = "ls -ltr"
subprocess.run([sys.executable,cmd])
经过几个小时的反复试验,在 Colab 页面上进行了简单的文档搜索,我找到了答案。它位于“向 shell 传递值和从 shell 传递值”的标题下。以下修改后的代码对我有用。
%%capture
import os,sys
import subprocess
directory = '/content/darknet/data/testimages/'
for filename in os.listdir(directory):
cmd = "./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
try:
!{cmd}
except:
print("failed")
cmd = "cp 'predictions.jpg' '/mydrive/birds/results/" + filename + "_results.jpg' "
!{cmd}
尝试运行你的subprocess
这种方式!
import os
import subprocess
env = os.environ.copy()
subprocess.run(cmd, shell=True, env=env)
这对我有用。我发现这适用于所有 OS。不要在 cmd.
中添加 !
作为我正在使用 Yolov4 进行的项目的一部分,我正在尝试使用学习的权重测试多个图像,并将添加了边界框的结果图像复制到我的 google 驱动器。 以下是我 运行ning 在 colab 上的代码。 它只是不工作,并且没有要调试的日志消息。如果我直接在 cmd 变量中 运行 命令,请不要这样做,它工作正常,但这只是针对一张图像。 我的目标是自动化或“批量”测试过程。
感谢您的帮助。
#%%capture
import os,sys
import subprocess
directory = '/content/darknet/data/testimages/'
for filename in os.listdir(directory):
#cmd = "./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
cmd = "!./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
try:
subprocess.run([sys.executable,cmd])
except:
print("failed")
#print(os.path.join(directory, filename))
cmd = "!cp 'predictions.jpg' '/mydrive/birds/results/" + filename + "_results.jpg' "
#print(cmd)
#cmd = "ls -ltr"
subprocess.run([sys.executable,cmd])
经过几个小时的反复试验,在 Colab 页面上进行了简单的文档搜索,我找到了答案。它位于“向 shell 传递值和从 shell 传递值”的标题下。以下修改后的代码对我有用。
%%capture
import os,sys
import subprocess
directory = '/content/darknet/data/testimages/'
for filename in os.listdir(directory):
cmd = "./darknet detector test data/obj.data cfg/yolov4-obj.cfg /content/darknet/cfg/yolov4-obj_4000.weights /content/darknet/data/testimages/" + filename
try:
!{cmd}
except:
print("failed")
cmd = "cp 'predictions.jpg' '/mydrive/birds/results/" + filename + "_results.jpg' "
!{cmd}
尝试运行你的subprocess
这种方式!
import os
import subprocess
env = os.environ.copy()
subprocess.run(cmd, shell=True, env=env)
这对我有用。我发现这适用于所有 OS。不要在 cmd.
中添加!