যুক্তির মাধ্যমে বাশ থেকে পাইথন স্ক্রিপ্টকে কল করুন


91

আমি জানি যে আমি নিম্নলিখিতটি ব্যবহার করে আমার বাশ স্ক্রিপ্ট থেকে একটি অজগর স্ক্রিপ্ট চালাতে পারি:

python python_script.py

তবে আমার বাশ স্ক্রিপ্ট থেকে আমার পাইথন স্ক্রিপ্টে কোনও পরিবর্তনশীল / তর্কটি পাস করতে চাইলে কী হয়। আমি এটা কিভাবে করবো?

মূলত বাশ একটি ফাইলের নাম কাজ করে এবং তারপরে অজগর এটি আপলোড করবে, তবে আমি যখন ফোন করি তখন বাশ থেকে পাইথনটিতে ফাইল নাম পাঠাতে হবে।


python python_script.pypython python_script.py arg1 arg2 ...
দেবিয়ানে

@ জিমি অপ্রত্যাশিত প্রশ্ন আমি মনে করি, এটি খুব সহজ লিঙ্ক: টিউটোরিয়ালসপয়েন্ট
প্যাথন

উত্তর:


133

ব্যাশ স্ক্রিপ্টে একটি অজগর স্ক্রিপ্ট সম্পাদন করতে আপনাকে একই কমান্ডটি কল করতে হবে যা আপনি টার্মিনালের মধ্যে করতে পারেন। এই ক্ষেত্রে

> python python_script.py var1 var2

পাইথনের মধ্যে এই পরিবর্তনগুলি অ্যাক্সেস করতে আপনার প্রয়োজন হবে

import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2

ধন্যবাদ তবে এইভাবে কেবলমাত্র একটি ব্যবহারের ক্ষেত্রে পাইথন ফাইলকে সীমাবদ্ধ করে। বাশ স্ক্রিপ্টগুলির মধ্যে ডায়নামিক পরামিতিগুলির সাথে পাইথন ফাইলের পদ্ধতিগুলি কল করার কোনও উপায় আছে কি? এইভাবে, আমরা একই অজগর ফাইলটি ব্যবহার করতে সক্ষম হব। আমি বাশ স্ক্রিপ্টের মধ্যে $ ভের সাথে পাইথন ফাইল পদ্ধতিগুলির মাধ্যমে কল করার চেষ্টা করেছি। তবে এটি একরকম ব্যর্থ হয়েছিল।
বোরকাক

@ বারাকাক আপনি যদি গতিশীল প্যারামিটারের উপর ভিত্তি করে পাইথন ফাইলটি সমান্তরালভাবে সম্পাদন করতে চান তবে প্রথমে সম্পূর্ণ পথটি তৈরি করুন << পাইথন স্ক্রিপ্টের অবস্থানের পথ >> / << পাইথন স্ক্রিপ্টের নাম >> প্যারাম 1 প্যারাম 2 | << পাইথন স্ক্রিপ্টের অবস্থানের পথ >> / << পাইথন স্ক্রিপ্টের নাম >> বাশ স্ক্রিপ্টে প্যারাম 3 প্যারাম 4, তারপরে নিচের পাইথন স্ক্রিপ্টের আর্গুমেন্ট হিসাবে আউটপুটটি পাস করুন, এসিস আমদানি সাবপ্রসেস arg_str = "" .জাইন (sys.argv [1:]) সেমিডিএস = আরগ_সিস্টারে প্রবেশ করুন। সেমিডসিতে সেমিডির জন্য বিভক্ত ('|'): মুদ্রণ ('কল -' + সেন্টিমিডি) সাবপ্রসেস.পোপেন (সেমিডি, শেল = ট্রু) মুদ্রণ ('কল সেন্টিমিডেস সমাপ্ত')
থিরু

21

ব্যবহার

python python_script.py filename

এবং আপনার পাইথন স্ক্রিপ্টে

import sys
print sys.argv[1]

21

পাশে sys.argv, এছাড়াও কটাক্ষপাত করা argparse মডিউল দেখবেন, যার স্ক্রিপ্টের জন্য অপশন এবং আর্গুমেন্ট নির্ধারণ করতে সাহায্য করে।

আরগপার্স মডিউলটি ব্যবহারকারী-বান্ধব কমান্ড-লাইন ইন্টারফেসগুলি লিখতে সহজ করে তোলে।


আমি একমত, আমার কাছে আরগপার্সে sys.argv এর চেয়ে অনেক ভাল বিকল্প
মো আলী আলী

8

এম্বেড করা বিকল্প:

ব্যাশ ফাংশনে পাইথন কোডটি মোড়ানো।

#!/bin/bash

function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}

# Call it
current_datetime

# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT

আপনার এম্বেড থাকা পাইথন স্ক্রিপ্টে ডেটা প্রেরণ করতে, পরিবেশের ভেরিয়েবলগুলি ব্যবহার করুন।

#!/bin/bash

function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}

# Do it one way
line 80

# Do it another way
echo $(line 80)

http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scriptts.html


1

লিপিটিতে ব্যবহার করুন:

echo $(python python_script.py arg1 arg2) > /dev/null

বা

python python_script.py "string arg"  > /dev/null

স্ক্রিপ্ট আউটপুট ছাড়াই কার্যকর করা হবে।


বাশ থেকে আসা একটি ভেরিয়েবলের সাথে "স্ট্রিং আরগ" প্রতিস্থাপন করা সম্ভব?
কোডগুরু

1

আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা একটি বার্তা উইন্ডো প্রদর্শন করতে একটি অজগর রুটিনকে কল করে। পাইথন স্ক্রিপ্টটি বন্ধ করার জন্য আমাকে কিল্ল ব্যবহার করতে হবে আমি উপরোক্ত পদ্ধতিটি ব্যবহার করতে পারছি না কারণ এর অর্থ হ'ল কিলাল অজগরটি চলতে পারে যা অন্যান্য পাইথন প্রোগ্রামগুলি গ্রহণ করতে পারে তাই আমি ব্যবহার করি

pythonprog.py "$argument" & # সরাসরি ব্যাশ স্ক্রিপ্টে নিয়ন্ত্রণগুলি রিটার্ন করে তাই অবশ্যই ব্যাকটিক্সের বাইরে থাকতে হবে। এই বার্তাটির পূর্বরূপটি কোনও কারণে কমান্ডের উভয় পাশ "" "ছাড়াই এটি দেখায়।

যতক্ষণ না পাইথন স্ক্রিপ্টটি পাইথন পাইথনপ্রগের পরিবর্তে ক্লাইম থেকে নাম নিয়ে চলবে .পি এটি স্ক্রিপ্টের মধ্যে কাজ করে। আপনার যদি একাধিক যুক্তির প্রয়োজন হয় তবে উদ্ধৃতিগুলির মধ্যে প্রতিটিটির মধ্যে একটি স্পেস ব্যবহার করুন।


-1

এবং getopt মডিউলটি একবার দেখুন। এটি আমার পক্ষে বেশ ভাল কাজ করে!


getopt ডকস শুরু: দ্রষ্টব্য: getopt মডিউল হ'ল কমান্ড লাইন বিকল্পগুলির একটি পার্সার, যার এপিআই সি getopt () ফাংশনের ব্যবহারকারীদের সাথে পরিচিত হওয়ার জন্য ডিজাইন করা হয়েছে। যে ব্যবহারকারীরা সি গোটোপ্ট () ফাংশনটির সাথে অপরিচিত বা যারা কম কোড লিখতে চান এবং আরও ভাল সহায়তা এবং ত্রুটি বার্তা পেতে চান তাদের পরিবর্তে আরগপার্স মডিউলটি বিবেচনা করা উচিত।
কেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.