【问题标题】:How can I execute command line arguments as if they were code?如何像代码一样执行命令行参数?
【发布时间】:2020-04-15 15:14:43
【问题描述】:

我想开发一个程序,我可以在其中将 python 代码作为命令行参数传递并作为命令运行。

解释一下,

cmd>python temp.py print('nirmal')
print('patel')

输出应该是

>>>print('nirmal')
nirmal
>>>print('patel')
patel

尝试过的代码:

import sys
from subprocess import Popen,PIPE

data = sys.stdin.readlines()
#print(data)

process=Popen("python",shell=True)
process.wait()

此代码运行 python shell,但如何输入 python 代码作为参数?

如果您有任何其他相同目的的替代方案,请告诉我。

【问题讨论】:

    标签: python-3.x cmd


    【解决方案1】:

    我相信您可以使用exec() 来执行此操作。

    import sys
    
    for i in range(1, len(sys.argv)):
        exec(sys.argv[i])
    

    注意:范围从 1 开始,因为 sys.argv[0] 将是名称 你的脚本。

    在 bash 终端中测试结果:

    josh@josh-desktop:~$ python3 test.py "x = 1 + 1" "print(str(x))"
    2
    
    

    【讨论】:

    • 实际上,我的目标是提供多行代码复制+粘贴工具,我不能使用 exec() 因为它会直接输出。但值得回答。
    • 对于这种多行复制+粘贴,各个语句是否会出现在他们自己的引号中?
    【解决方案2】:
    import win32com.client
    import sys
    import sys
    from subprocess import Popen,PIPE,call
    import time
    # process=Popen("pip list --outdated",stdout=PIPE,stdin=PIPE,shell=True,bufsize=1)
    # data= process.stdout.readlines()
    
    # for i in range(2,len(data)):
    #   temp=data[i].decode("utf-8").split(' ')
    #   print(temp[0])
    #   command="runas /user:administrator 'pip install {0} --upgrade'".format(temp[0])
    #   print(command)
    
    shell = win32com.client.Dispatch("WScript.Shell")
    # shell.AppActivate("Outlook")
    shell.SendKeys('runas /user:administrator "pip install pip --upgrade"{ENTER}')
    shell.SendKeys("password{ENTER}")
    print(shell)
    shell.SendKeys('runas /user:administrator "pip install pygame"{ENTER}')
    shell.SendKeys("password{ENTER}")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2012-03-20
      • 2011-11-25
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多