【发布时间】:2020-08-19 13:28:24
【问题描述】:
我对 Python 非常陌生,并且在 Stack 上搜索答案,所以如果这是一个菜鸟错误,我请求原谅,如果答案存在于某处,请继续发送。
完成了 Python 的 1 门小课程(在 youtube 上),我有一个批处理文件,我想将其转换为 Python 作为第一个项目。 基本上,当我在办公室时,批处理文件会打开我需要的所有应用程序。
我的第一个项目已经写了这么多。出于显而易见的原因编辑了代码片段。
import subprocess
keys = []
open_now = ""
count = 0
programs_to_run = {'Chrome': r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
'Outlook': r'C:\Program Files\Microsoft Office\\root\Office16\OUTLOOK.exe'}
# This line puts the keys in dictionary in a usable list
for key in programs_to_run.keys():
# print(key)
keys.append(key)
for program in programs_to_run:
open_now = "programs_to_run.get(programs_to_run.get(keys[count]))"
subprocess.Popen(open_now)
print(f'Opening {keys[count]}!')
# print(programs_to_run.get(keys[count]))
count += 1
print("*****************************************************************")
print("All applications opened fine.")
print("*****************************************************************")
input('Press ENTER to exit')
quit()
我已经在命令提示符下测试了 subprocess.Popen('Full Path') 并且它工作得很好。 作为一个菜鸟,我已经测试了正在打印的子流程的每个部分,并且效果很好。
当我按原样运行上述代码时,我得到以下信息。由于我的字典较小(我要打开的总共 8 个应用程序),子进程的行会发生变化
Traceback (most recent call last):
File "C:/Users/User/OneDrive - Company/Python_Projects/WorkSetup/WorkSetup.py", line 28, in <module>
subprocess.Popen(programs_to_run.get(programs_to_run.get(keys[count])))
File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 1247, in _execute_child
args = list2cmdline(args)
File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 549, in list2cmdline
for arg in map(os.fsdecode, seq):
TypeError: 'NoneType' object is not iterable
欢迎任何和所有帮助。
我还在学习代码,所以请将语言保持在新手级别。
最终目标;有一个从 PC 开始的脚本/可执行文件,检查我是否在办公室(如果本地域是可访问的),现在不知道如何完成此步骤。将研究更接近时间。 如果是,则打开所有应用程序,如果不是,则仅打开 2.
【问题讨论】:
-
"programs_to_run.get(programs_to_run.get(keys[count]))"是 Python 代码。cmd将如何成功地解释它? -
如果你想执行该代码,并将执行它的结果放在
open_now中,那么你需要去掉引号围绕它。 -
...而如果您 取消 引号,那么我强烈建议您在将返回的值传递给
Popen之前检查它并确保它实际上是明智并符合您的期望。正如目前给出的那样,这不是subprocess的问题,而是生成subprocess参数的代码的问题;您可以考虑所有与subprocess相关的部分,但仍然有一个问题(这将是一个更好的 -- 更严格、更窄、更具体 -- 问题)。 -
我按照您的专家眼光回去了,将子流程更改为打印,但没有正确拉动。一起删除 open_now 并将 subprocess.Popen(programs_to_run.get(programs_to_run.get(keys[count]))) 更改为 subprocess.Popen(programs_to_run.get(keys[count])) 并且有效。谢谢你对我的包容
-
感谢您的建议,我会努力简化问题。
标签: python python-3.x subprocess