Python 3:使用子进程通过 gphoto2 拍照但无法设置自定义文件名。
Python 3: Using subprocess to take photo via gphoto2 but can't set custom filename doing it.
当我通过终端执行时一切正常,但是当我使用 python 脚本时它却没有。
命令:
gphoto2 --capture-image-and-download --filename test2.jpg
New file is in location /capt0000.jpg on the camera
Saving file as test2.jpg
Deleting file /capt0000.jpg on the camera
我身体不太好。
但是当我尝试通过 python 脚本和子进程执行此操作时,什么也没有发生。我试着这样做:
import subprocess
text1 = '--capture-image-and-download"'
text2 = '--filename "test2.jpg"'
print(text1 +" "+ text2)
test = subprocess.Popen(["gphoto2", text1, text2], stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
和:
import subprocess
test = subprocess.Popen(["gphoto2", "--capture-image-and-download --filename'test2.jpg'"], stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
虽然我只使用 --capture-image-and-download
它工作正常,但我得到了我不想要的文件名。你能告诉我我做错了什么吗?!
在命令行中,引号和空格被 shell 占用;对于 shell=False
,您需要自己在空格上拆分标记(最好了解 shell 如何处理引号;或使用 shlex
为您完成工作)。
import subprocess
test = subprocess.Popen([
"gphoto2",
"--capture-image-and-download",
"--filename", "test2.jpg"],
stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
除非你坚持使用真正的旧石器时代 Python 版本,否则你应该避免使用 supbrocess.Popen()
而选择 subprocess.run()
(或者,对于稍旧的 Python 版本,subprocess.check_output()
).较低级别的 Popen()
接口很笨重,但是当较高级别的 API 不执行您想要的操作时,它会为您提供低级别的访问控制。
当我通过终端执行时一切正常,但是当我使用 python 脚本时它却没有。
命令:
gphoto2 --capture-image-and-download --filename test2.jpg
New file is in location /capt0000.jpg on the camera
Saving file as test2.jpg
Deleting file /capt0000.jpg on the camera
我身体不太好。 但是当我尝试通过 python 脚本和子进程执行此操作时,什么也没有发生。我试着这样做:
import subprocess
text1 = '--capture-image-and-download"'
text2 = '--filename "test2.jpg"'
print(text1 +" "+ text2)
test = subprocess.Popen(["gphoto2", text1, text2], stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
和:
import subprocess
test = subprocess.Popen(["gphoto2", "--capture-image-and-download --filename'test2.jpg'"], stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
虽然我只使用 --capture-image-and-download
它工作正常,但我得到了我不想要的文件名。你能告诉我我做错了什么吗?!
在命令行中,引号和空格被 shell 占用;对于 shell=False
,您需要自己在空格上拆分标记(最好了解 shell 如何处理引号;或使用 shlex
为您完成工作)。
import subprocess
test = subprocess.Popen([
"gphoto2",
"--capture-image-and-download",
"--filename", "test2.jpg"],
stdout=subprocess.PIPE)
output = test.communicate()[0]
print(output)
除非你坚持使用真正的旧石器时代 Python 版本,否则你应该避免使用 supbrocess.Popen()
而选择 subprocess.run()
(或者,对于稍旧的 Python 版本,subprocess.check_output()
).较低级别的 Popen()
接口很笨重,但是当较高级别的 API 不执行您想要的操作时,它会为您提供低级别的访问控制。