【问题标题】:Remember command line variables in python记住python中的命令行变量
【发布时间】:2019-08-28 16:53:33
【问题描述】:

我想让命令行在 python 中运行。

例如:

import subprocess

subprocess.call('set /A x = 5', shell=True)  
subprocess.call('echo %x%', shell=True)  

我希望我记得 x 设置的值 5。但它只是将%x% 作为字符串回显。

【问题讨论】:

  • 我认为您确实需要重新了解什么 环境变量是什么,以及它们是如何在系统级别实现的。你想做的事情根本不会那样工作。
  • 重新考虑在脚本中设置变量,并将它们作为参数/变量传递给每个子进程调用。
  • 我正在尝试在 python 中创建一个交互式命令行
  • @Jake 然后改用subprocess.Popen 并保持会话处于活动状态,并改用process.stdin.write/process.stdout.read。使用process.poll() 将监控进程是否已经死亡。

标签: python python-3.x cmd subprocess


【解决方案1】:

使用subprocess 非常具体地意味着您运行另一个进程。当控制从子进程返回到 Python 时,设置变量的进程将不再存在。

试试

import os
import subprocess

env = os.environ.copy()
env['x'] = '5'
subprocess.check_call(
    'echo %x%',
    shell=True,
    env=env)

还要注意切换到check_call - 在这里可能没什么大不了的,但您通常应该检查子进程故障。

【讨论】:

  • (幸运的是,我无法访问 Windows,因此无法对此进行测试。我记得用于环境扩展的百分号的数量和位置在不同场景之间以微妙和令人眼花缭乱的方式变化。)跨度>
  • 不,百分号的位置和数量总是在(环境)变量扩展之前+之后。也许您正在考虑 for 循环变量..?
  • @thebjorn 谢谢,自从我需要保持对批处理文件语法的积极了解以来已经有很多年了,所以我不确定,但我想你可能是对的。
  • 最好我想保持一个 Popen() 打开,读取输出,然后给它更多的输入,所以它会记住变量
  • 不过,这根本不是您要问的。这可以很容易地适应Popen;它接受相同的 env= 关键字参数。如果您需要更多帮助,也许可以接受这一点并就您的实际要求提出一个新问题。
猜你喜欢
  • 2011-04-04
  • 2019-04-17
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多