【问题标题】:subprocess.Popen from python errors when I try run. Work fine in cmdsubprocess.Popen 尝试运行时出现 python 错误。在cmd中工作正常
【发布时间】: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


【解决方案1】:

试试这个

import subprocess

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'}

for program in programs_to_run:
    subprocess.Popen([], executable = programs_to_run[program])
    print(f'Opening {program}!')

print("*****************************************************************")
print("All applications opened fine.")
print("*****************************************************************")

input('Press ENTER to exit')

quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2023-03-10
    • 2017-09-17
    • 2016-10-13
    • 2021-06-09
    • 1970-01-01
    相关资源
    最近更新 更多