» »

Kako narediti python "cmd line" program

Kako narediti python "cmd line" program

Miha9888 ::

Zravo! Spoprijemam se z problemom v pythonu. Želim narediti program, ki izpiše vsa omrežja, na katera je bil računalnik že povezan in nato odpre njihovo natancnejso konfiguracijo, za vsakega. Do sedaj mi je uspelo spisati tole nato pa se mi je ustavilo:

import os

command1 = os.popen("netsh wlan show profiles").read()

print command1[]


kot rezulatat "command1" dobim celo vrstico vseh user profilov. Kot command2 želim commando "netsh wlan show profile (ime omrežja)" Torej program bi le izvajal komando "netsh wlan show profiles" in "netsh wlan show profiles (ime omrežja)". spremenljivka je le ime omrežij, katerih nevem kako bi spravil v komando.
Če nisem dovolj razumljiv, lahko poizkusim še enkrat razložiti
najlepša hvala:)
  • spremenil: bluefish ()

bluefish ::

argv?

Miha9888 ::

bluefish hvala za odgovor:)
Sam sem še malo nov pri Pythonuin nevem tocno kako mislis, da bi uporabil argv, se ti da naredit primer?
hvala:)

Gandalfar ::

Miha9888 ::

torej z sys.argv je mozno izpeljati tole:?
 null

null


Najlepša hvala:)

jype ::

Ne, argv ne bo odgovor zate. Kar iščeš je uporaba regularnih izrazov. Žal nimam Windows računalnika, da bi z njim preizkusil, ampak načeloma gre nekako takole:

import re

for profile in re.findall(r': (.*)$', command1):
  cmd2 = 'netsh wlan show profile {profile}'.format(profile=profile)
  command2 = os.popen(cmd2).read()
  print command2

Miha9888 ::

jype hvala za pomoč:)
Sem prekopiral tole kodo pa mi napiše error, command1 is not defined
sem poizkusil še takole

import re, os
command1 = os.popen("netsh wlan show profiles").read()

for profile in re.findall(r': (.*)$', command1):
  cmd2 = 'netsh wlan show profile {profile}'.format(profile=profile)
  command2 = os.popen(cmd2).read()
  print command2


pa sploh ni outputa :/

Zgodovina sprememb…

  • spremenil: bluefish ()

PromeuZ ::

<!-- https://pisalnik.wordpress.com -->

Miha9888 ::

Sem tudi tole prebral pa mi ni kaj v pomoč. POmoje bi moralo delovati tole od jypeta vendar sam neznam dokončat kode:|

Miha9888 ::

No, sem še tole probaval

import subprocess

results = subprocess.check_output(["netsh", "wlan", "show", "network"])

results = results.replace("\r","")
ls = results.split("\n")
ls = ls[4:]
ssids = []
x = 0
while x < len(ls):
    if x % 5 == 0:
        ssids.append(ls[x])
    x += 1
print(ssids)

ssids1 = ssids[0]
results2 = subprocess.check_output(["netsh", "wlan", "show", "profile",ssids1])
print results2


ampak kot ssids1 dobim tak zapis: 'SSID 1 : (ime omrežja)' kako bi se naredilo da bi mi izpisalo samo ime omrežja brez "ssid 1" na začetku?

Se opravičujem, neznam limat kode

Zgodovina sprememb…

  • spremenil: bluefish ()

bluefish ::

Kodo daš med [ st.koda ] in [ /st.koda ] (brez presledkov znotraj oglatih oklepajev) oziroma pri pisanju odgovora uporabiš gumb Vstavi kodo na začetku in koncu kode.

Zgodovina sprememb…

  • spremenil: bluefish ()

ragezor ::

import re, os

command1 = os.popen("netsh wlan show profiles").read()

for profile in re.findall(r': (.*)', command1):
  cmd2 = 'netsh wlan show profile {profile}'.format(profile=profile)
  command2 = os.popen(cmd2).read()
  print command2


iz jypetovega regularnega izraza sem odstranil $, ki pomeni, da matcha zadeve na koncu stringa (oziroma pred newlinom na koncu stringa)

druga moznost je da dodas MULTILINE flag, ki pomeni, da bo $ matchal pred vsakim newlinom ne samo na koncu stringa
re.findall(r': (.*)$', command1, flags=re.MULTILINE)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C in funkcije ter #define

Oddelek: Programiranje
463968 (2329) misek
»

Program za set back time (RUN AS DATE)

Oddelek: Programska oprema
374866 (4490) Yacked2
»

curl + ssl

Oddelek: Programiranje
8794 (612) MrStein
»

Python vrstica v seznam

Oddelek: Programiranje
5965 (848) brodul
»

Python razcep niza

Oddelek: Programiranje
12934 (801) Invictus

Več podobnih tem