Başka bir bilgisayarda .py uzantılı dosya çalıştırma

Aynı ağda bulunan bir bilgisayardan Python kullanarak diğer bir bilgisayardaki .py uzantılı dosyayı o bilgisayar üzerinde (kullandığımda değil) çalıştırmak istiyorum. Böyle bir şeyin yapılması mümkün müdür?

Diğer bilgisayarlar size mi ait olacak? Ve bu bilgisayarın işletim sistemi ne?

Evet bilgisayarlar benim. Asıl kullanacağım bilgisayar Windows 10, diğeri ise Windows 7

socket modülünü kullanarak aynı ağdaki diğer bilgisayara bağlanabilirsiniz. Kullandığınız bilgisayarı sunucu olarak ayarlarsınız, diğer bilgisayarı da istemci olarak ayarlarsınız (hangisinin sunucu, hangisinin istemci olduğu önemli değil.). Sunucudan istemciye gönderdiğiniz mesajlar komut veya kod şeklinde olabilir, istemci de bu gelen mesajları eval fonksiyonu ile çalıştırır.

Minimal bir örnek:

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 12345))
s.listen(1)

conn, addr = s.accept()

while True:   
    eval(conn.recv(1024))

client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("", 12345))

while True:
    s.send(input(">>> ").encode())
1 Beğeni

Diğer bilgisayardaki py dosyasını çalıştırmak için de komutu ona göre ayarlarsınız. Diyelim server.py dosyasının bulunduğu bilgisayarda Desktop üzerinde test.py isimli bir dosya var. server.py dosyası da Desktop dizininde yer alıyor olsun.

client.py dosyasını kullanarak diğer bilgisayardaki test.py dosyasını çalıştırmak istiyorsunuz. O halde server.py ve client.py yi şöyle değiştirebilirsiniz.

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 12345))
s.listen(1)

conn, addr = s.accept()
eval(conn.recv(1024))

client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("", 12345))

komut = "__import__('os').system('python test.py')".encode()
s.send(komut)

Eğer test.py, client.py ile aynı dizinde değilse, bu kez komuta test.py'nin dizininin tam halini yazarsınız. Yani;

komut = r"__import__('os').system('python C:\...\test.py')".encode()
3 Beğeni

Bende bu konu ile ilgileniyorum

s.bind(("<buraya>", 12345))

ip mi yazılacak ?

Evet, oraya host adresi yazılıyor.

komut = "__import__('os').system('python test.py')".encode()

Burada herhengi bir cmd komutu olabilir mi çünkü burada os system görüyorum.

Olabilir evet.

Bu host adresi Windows 7 bilgisayarın host adresini temsil ediyor değil mi ?

Vede server.py Windows 7 de mi olacak ?

server.py adı üzerinde sunucu bilgisayarda çalıştırılır.

client.py diğer bilgisayarda olmalı.

Anlamadım server.py içerisinde kod göndermek için herhangi bir veri bulundurmuyor aksine verileri almak ve uygulamak için olan kodları barındırıyor. Cilent.py dosyası ise s.connect(("", 12345)) ile sunucuya bağlanıp komut = "__import__('os').system('python test.py')".encode() ile veriyi belirleyip s.send(komut) ile onu sunucuya yolluyor benim anladığım çalıştırılmak istenen dosyanın bulunduğu bilgisayara server.py gönderiliyor cilent py ise dosyayı çalıştırmak istenen kişinin bilgisayarında bulunuyor yani ben cilent py yi kendi bilgisayarımda server.py yi öbür bilgisayarında tutacağım değil mi ?