পাইথন স্ক্রিপ্ট থেকে নির্দিষ্ট পরামিতি পার্স করুন


0

আমার একটি ছেজ আউটপুট রয়েছে যা আমি নিজেকে অ্যাকাউন্ট হিসাবে পরিচিতি ফর্ম্যাট করেছি। এটিতে মূলত একটি বিভাগ হিসাবে তালিকাভুক্ত ব্যবহারকারীর নাম এবং তার নীচের তথ্য (যা পরামিতি) are আমি মূলত যে কোনও অ্যাকাউন্টের মেয়াদ শেষ হয়ে গেছে এমন কোনও অ্যাকাউন্টকে পার্স করতে চাই = কখনই না এবং বিভাগটির নাম একটি নতুন ফাইলে আমাকে দিন। ফাইলটির অ্যাকাউন্টগুলির দেখতে এখানে কী:

[user1]
Last_password_change = password_must_be_changed
Password_expires = never
Password_inactive = never
Account_expires = never
Minimum_number_of_days_between_password_change = 7
Maximum_number_of_days_between_password_change = 90
Number_of_days_of_warning_before_password_expires = 14

[user2]
Last_password_change = password_must_be_changed
Password_expires = never
Password_inactive = never
Account_expires = never
Minimum_number_of_days_between_password_change = 7
Maximum_number_of_days_between_password_change = 90
Number_of_days_of_warning_before_password_expires = 14

আমার এখন অবধি যা আছে তা এখানে ঠিক আছে তবে আমি এটি পছন্দ করব ঠিক তেমন এটি পেতে পারে না।

#!/usr/bin/python

from ConfigParser import RawConfigParser
import re
import sys

# Read configuration from ~/accounts
_cfg = RawConfigParser()
_cfg.read('accounts')
cfg = dict()
for sect in _cfg.sections():
        cfg[sect] = dict()
        for (name, value) in _cfg.items(sect):
                cfg[sect][name] = value

                if cfg[sect]['Account_expires'] == "never":

                        f = open('access','w')
                        f.write('still has access')
                        f.close()

আমি বুঝতে পেরেছি যে নতুন 'অ্যাক্সেস' নামক নতুন ফাইলে আমি কেবল 'অ্যাক্সেস আছে' রাখছি তবে আমি সেখানে ব্যবহারকারীর নামটি আউটপুট করতে চাই। কোন সাহায্যের জন্য ধন্যবাদ।


grep -B4 'Account_expires = never' accounts.txt | grep '\['
সাইরাস

এটি দুর্দান্ত কাজ করে এবং এটির প্রশংসা করে। অজগর পথে কোনও সুযোগও কি তা করার জন্য?
ইউনিক্সপাইপ

দুঃখিত, আমি বেসিক, লোগো (প্রোগ্রামিং ভাষা), সি, সি ++, ইনটেল 8085 এর এসেম্ব্লার, পার্ল, অ্যাড, সিড, রেজেক্স, কোবোল এবং ব্যাশ জানি কিন্তু পাইথন নেই।
সাইরাস

ঠিক আছে কারণ আমি অজগর পথটি খুঁজছিলাম কারণ আমি বুঝতে পেরেছিলাম যে "পাসওয়ার্ড_ইনােক্টিভ = কখনই নয়" এর জন্য আমারও গ্রেপ করা দরকার। সুতরাং এর মধ্যে যদি কখনও না হয় তবে আমি ব্যবহারকারীকে চাই। গ্রেপ-বি 4 ব্যবহার করে সমস্যাটি হ'ল যদি কেবল পাসওয়ার্ড নিষ্ক্রিয় থাকে না তবে আমি ব্যবহারকারীকে গ্রেপ আউট করতে সক্ষম হব না। চারপাশে কোন কাজ?
ইউনিক্সপাইপ

আমার ভুল. আমার উভয়ের জন্য গ্রেপ করা দরকার যেহেতু উভয়ই লক করা অ্যাকাউন্টকে বোঝায়। তবে উভয়েরই অর্থ হ'ল তারা এখনও অ্যাক্সেসযোগ্য। ধন্যবাদ।
ইউনিক্সপাইপ

উত্তর:


0

আপনার কাছে এমন কোড রয়েছে যা অকারণে আলাদা আলাদা অ্যারেতে অনুলিপি করে। ফলাফল থেকে এটি সরল লুপে ছাঁটা হয়েছে _cfg। আমি লিখছি না accessতবে সমস্ত তথ্য কীভাবে সংগ্রহ করতে হবে তার ইঙ্গিত দিচ্ছি , তারপরে মূল লুপের পরে শেষ পর্যন্ত সব লিখে ফেললাম । (আপনার কাছে যদি প্রচুর ডেটা থাকে তবে আপনি পড়ার সাথে সাথে লেখার বিষয়টি আবারও বোঝা শুরু করে তবে একটি সহজ, দ্রুত কাজের জন্য আমি সংগ্রহ করব, তারপরে লিখব))

#!/usr/bin/env python

from ConfigParser import RawConfigParser


# Read configuration from ~/accounts
_cfg = RawConfigParser()
_cfg.read('accounts')

users = []
for sect in _cfg.sections():
    for (name, value) in _cfg.items(sect):
        # Notice that the names are normalized to all lowercase
        if name in ['account_expires', 'password_inactive'] and value=="never":
            users.append(sect)
            break  # done with this user, break out of inner loop
for user in users:
    print("User %s still has access" % user)

আপনি কখনই ব্যবহার করছেন না reবা sysপ্রথম স্থানে ছিলেন না এবং আপনার স্ক্রিপ্টে আরও কিছু ডেড কোড ছিল।


আমি মনে করি আপনার স্ক্রিপ্টে একটি ত্রুটি আছে। আমি ইচ্ছাকৃতভাবে মানটি অন্য মান থেকে কখনই পরিবর্তন করেছিলাম এবং স্ক্রিপ্টটি এখনও ফিরে এসেছে যে ব্যবহারকারীর অ্যাক্সেস রয়েছে। আপনি কি মডিউলগুলিও লোড করার সাথে পূর্ণ স্ক্রিপ্টটি অন্তর্ভুক্ত করতে পারেন?
ইউনিক্সপাইপ

এখানে আমার জন্য কাজ করে। যদিও (স্পষ্ট) অনুপস্থিত অংশগুলি যুক্ত করেছে।
ট্রিপলি

যদিও আমি প্রশ্নের আপনার শেষ মন্তব্যটি ভুল বুঝেছি। আমি ব্যাখ্যা করেছিলাম "আমার উভয়ের জন্য গ্রিপ করা দরকার যেহেতু উভয়ই একটি লকড অ্যাকাউন্টকে বোঝায়। তবে উভয়েরই অর্থ এই নয় যে তারা এখনও অ্যাক্সেসযোগ্য" যার অর্থ তারা যদি কখনও "না হয়" তবে এটি একটি বিশেষ ক্ষেত্রে। আপনার যদি (তবুও) কেবলমাত্র যদি তদন্তের প্রয়োজন হয় যে তাদের মধ্যে কমপক্ষে কোনও একটি "কখনই নয়", স্ক্রিপ্টটি সরল করা যায় - কেবল একটি সহজ পতাকা ব্যবহার করুন এবং এড করার Trueপরিবর্তে এটি সেট করুন never(কেবলমাত্র বুলিয়ান দিয়ে অ্যারেটি প্রতিস্থাপন করুন)।
ট্রিপলি

আমি এই সরলীকরণ করেছি। আপনি যদি এটি না চান তবে এই উত্তরের সম্পাদনার ইতিহাস থেকে পূর্ববর্তী সংস্করণটি পরীক্ষা করুন।
ট্রিপলি

0

এখানে আমি লক্ষ্য করেছি যা আসলে কাজ করেছিল। আমি লেন পরিবর্তন করি (কখনই নয়) == 1 থেকে লেন (কখনই নয়) == ২. এটি কাজ করে বলে মনে হচ্ছে এবং আমি ধরে নিচ্ছি কারণ এটি দুটি বিকল্পের জন্য কখনই 2 ম্যাচের সঠিক দৈর্ঘ্যের সন্ধান করছে না (অ্যাকাউন্টটির মেয়াদ শেষ হয়ে গেছে এবং পাসওয়ার্ড) নিষ্ক্রিয় ক্ষেত্র)। আমি কি সঠিক?

users = []
for sect in _cfg.sections():
    never = []
    for (name, value) in _cfg.items(sect):
        print("# %s: %s = %s" % (sect, name, value))
        # Notice that the names are normalized to all lowercase
        if name in ['account_expires', 'password_inactive'] and value=="never":
            never.append(name)
    # Slightly ugly, check for exactly one value in "never"
    if len(never) == 2:
        users.append(sect)
for user in users:
    print("User %s still has access" % user)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.