mehrdad1991h
شنبه 13 تیر 1394, 10:46 صبح
سلام
من یک اسکریپت برای این که یک برنامه ی کامند لاین دیگر را باهاش اجرا کنم و ورودی را درش خودکار وارد کنم نوشتم
بدین صورت کار میکنه که توی cmd برنامه ی جدید باز میشه و وقتی input میخواهد میخواهم یه مقداری را print کنم که به عنوان ورودی برنامه ی دوم محسوب بشه
ولی این کار عملی نشد
من با چند روش این کار را انجام دادم
اول از subprocess و کد زیر استفاده میکردم
p = subprocess.Popen('"C:\app.exe" -sample',
stdin=subprocess.PIPE, universal_newlines=True, shell=True)
p.stdin.write("abc\n")
p.stdin.flush()
بعد با این کد تست کردم
p = subprocess.Popen('"C:\app.exe" -sample',
stdin=subprocess.PIPE, universal_newlines=True, shell=True)
p.communicate(input='my_input_string')[0]
ولی با این دوتا کد مشکل داره و برنامه کرش میکنه با stdin و stdout که استفاده کنم برنامه ی دوم که ورودی لازم داره کرش میکنه
خوب روفتم با theard اون ورودی را print کردم
اینجوری
def worker():
time.sleep(2)
print '1\n'
def main():
t = threading.Thread(target=worker)
t.start()
subprocess.Popen([PATH, '-sample'])
اینطوری print درست کار میکنه ولی توی اون یکی برنامه print نشده و باز هم جوابگو نبود
الان یک هفته هم میشه من مشکلم با این مورد هست و زبان پیش فرض برنامه نویسی من پایتون نیست و مسلط هم نیستم
ولی در این مورد باید ازش استفاده کنم
لطفا یک راهنمایی کنید و یک روشی کاری معرفی کنید که بتونم این عمل را انجام بدهم
سپاس
من یک اسکریپت برای این که یک برنامه ی کامند لاین دیگر را باهاش اجرا کنم و ورودی را درش خودکار وارد کنم نوشتم
بدین صورت کار میکنه که توی cmd برنامه ی جدید باز میشه و وقتی input میخواهد میخواهم یه مقداری را print کنم که به عنوان ورودی برنامه ی دوم محسوب بشه
ولی این کار عملی نشد
من با چند روش این کار را انجام دادم
اول از subprocess و کد زیر استفاده میکردم
p = subprocess.Popen('"C:\app.exe" -sample',
stdin=subprocess.PIPE, universal_newlines=True, shell=True)
p.stdin.write("abc\n")
p.stdin.flush()
بعد با این کد تست کردم
p = subprocess.Popen('"C:\app.exe" -sample',
stdin=subprocess.PIPE, universal_newlines=True, shell=True)
p.communicate(input='my_input_string')[0]
ولی با این دوتا کد مشکل داره و برنامه کرش میکنه با stdin و stdout که استفاده کنم برنامه ی دوم که ورودی لازم داره کرش میکنه
خوب روفتم با theard اون ورودی را print کردم
اینجوری
def worker():
time.sleep(2)
print '1\n'
def main():
t = threading.Thread(target=worker)
t.start()
subprocess.Popen([PATH, '-sample'])
اینطوری print درست کار میکنه ولی توی اون یکی برنامه print نشده و باز هم جوابگو نبود
الان یک هفته هم میشه من مشکلم با این مورد هست و زبان پیش فرض برنامه نویسی من پایتون نیست و مسلط هم نیستم
ولی در این مورد باید ازش استفاده کنم
لطفا یک راهنمایی کنید و یک روشی کاری معرفی کنید که بتونم این عمل را انجام بدهم
سپاس