আমি কীভাবে পপেনের জন্য কার্যকারী ডিরেক্টরিটি নির্দিষ্ট করতে পারি


185

পাইথনের কমান্ডের চলমান ডিরেক্টরিটি নির্দিষ্ট করার কোনও উপায় আছে কি subprocess.Popen()?

উদাহরণ স্বরূপ:

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')

আমার পাইথন লিপিটি এতে অবস্থিত C:\programs\python

C:\mytool\tool.exeডিরেক্টরি চালানো সম্ভব D:\test\local?

একটি উপ-প্রক্রিয়াটির জন্য আমি কীভাবে ওয়ার্কিং ডিরেক্টরি সেট করব?


2
মনে রাখবেন যে subprocess.call subprocess.Popen উপর শুধু একটি পাতলা মোড়কের, এবং পাশাপাশি, অন্তত যতটা আমার মনে আছে :) সহজ ক্ষেত্রে, subprocess.call ভাল লাঠি Popen সব আর্গুমেন্ট সহ এই মোড়কের পুলিশ হল
shabunc

উত্তর:


268

subprocess.Popen cwdবর্তমান কার্যনির্বাহী ডিরেক্টরি সেট করতে একটি যুক্তি গ্রহণ করে ; আপনি আপনার ব্যাকস্ল্যাশগুলি ( 'd:\\test\\local') এড়াতে বা ব্যবহার করতে চাইবেন বা r'd:\test\local'যাতে ব্যাথ্ল্যাশগুলি পাইথন দ্বারা অব্যাহতি ক্রম হিসাবে ব্যাখ্যা না করা হয়। আপনি যেভাবে এটি লিখেছেন, \tঅংশটি অনুবাদ করা হবে ক tab

সুতরাং, আপনার নতুন লাইনটি দেখতে হবে:

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

আপনার পাইথন স্ক্রিপ্ট পাথটি সিডব্লু হিসাবে import osব্যবহার করতে এবং সিডব্লিউডি এটি ব্যবহার করে সংজ্ঞায়িত করুন:

os.path.dirname(os.path.realpath(__file__)) 

2
Cwd সেট করার ক্ষেত্রে আর্গুমেন্টের সাথে শেল = ট্রু যুক্ত করলে কী প্রভাব হবে?
টি স্টোন

3
@T। প্রস্তর: একক কার্যকর কার্যকর হওয়ার জন্য, এটি কোনও কিছু পরিবর্তন করা উচিত নয়, যদি না এক্সি শেলের কিছু পরিবেশের পরিবর্তনশীলগুলির উপর নির্ভর করে, সম্ভবত। তবে এর সাহায্যে shell=Falseআপনি শেল বিল্টিন ব্যবহার করতে পারবেন না যেমন cd: যেমন শেল দিয়ে লিনাক্সে চেষ্টা করে দেখুন:subprocess.Popen("cd /tmp; pwd")
মার্ক রুশাখফ

12
অজগর 3 কমপক্ষে, উইন্ডোজ মেশিনে থাকা অবস্থায়ও আপনাকে ব্যাকস্ল্যাশগুলি ব্যবহার করতে হবে না, আমি ঠিক করেছি subprocess.call(["C:/Users/Bob/Some.exe"], cwd="C:/Users/Jane/")এবং এটি ঠিক কাজ করে
mgrandi

7
কাজ ডিরেক্টরি কি একটি নিখুঁত পাথ হতে হবে?
DXsmiley

10
এটি উপ-প্রসেস.সেক_আউটপুট () এর জন্যও কাজ করে। ধন্যবাদ!
স্যামুয়েল ড্যাজন 4'15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.