Daha çox

SIP modulu yüklənmədi (QGIS Python yüklənmir)


Bu yaxınlarda QGIS 2.4 quraşdırdım, ancaq Python yüklənmir. Windows 64 bit maşın üzərində işləyirəm.

"SIP modulu yüklənmədi Python dəstəyi deaktiv ediləcək" səhv mesajı alıram.

İzləmə (ən son zəng): "" Fayl, sətir 1, ImportError: DLL yüklənmə uğursuz oldu:% 1 etibarlı bir Win32 tətbiqi deyil.

C: / Python27-də başqa bir Python quraşdırılması var. 32-bit versiyasıdır.

C: / Python27 qovluğunu çıxardığımda QGIS yaxşı işləyir, bu səbəbdən yeni QGIS quraşdırılması ilə C: / Python27 python tərcüməçisi arasında bir əlaqə var. C: / Python'u qalıcı bir şəkildə silə bilmirəm, çünki digər tətbiqetmələrə ehtiyacım var, buna görə bunu necə düzəltmək barədə hər hansı bir təklifin olub-olmadığını merak edirəm.


Bir əmr pəncərəsinə yazınset> set.txtqurduğunuz bütün mühit dəyişənlərinin siyahısını almaq üçün. Python quraşdırmanız QGIS-in bəyənmədiyi bəzi dəyərləri təyin etmiş ola bilər.

PATH dəyişən qeyd olunur, çünki qgis.bat öz yol dəyişənini təyin edir, lakin PYTHONPATH və ya başqa bir şey zərərli ola bilər.

Bir keçid tapdıqdan sonraC: Python27, sistem xüsusiyyətlərinə keçin və mühit dəyişənini dəyişdirin (əmrlərin dil versiyanızda olduğundan əmin deyilsiniz).


pip3 sil PyQt5 mənim üçün çalışdı


Mənim vəziyyətimdə, fərqli python versiyalarının bir ziddiyyəti olduğu ortaya çıxdı. Ən son python 3.8-i qurduqdan sonra python 3.7-ni sildim. QGIS bir şəkildə hələ də python 3.7 istifadə edirdi. Və qovluqpiton 3.7qovluqda xatırladırC: Users user AppData Roaming Python.

Python 3.7 qovluğunun silinməsi ilə problem həll edildi.

BTW, Windows-da bir vəziyyətdir


SilinirPİNTONFATyuxarıda göstərildiyi kimi mühit dəyişən, Win7-də QGIS 2.18.9 w / GRASS x64 və python 2.7 ilə işimdə işləmədi. Nədənsə yığışdırmalı oldumc: python27mənimYol(müvəqqəti olaraq) və QGIS quraşdırma python27 qovluğunu əlavə etPİNTONFATdəyişən. Sonra QGIS 2.18.9 bu səhv olmadan işə başladı. Əlavə edə bildimc: python27yoluma qayıdın və QGIS-i heç bir çətinlik olmadan yenidən başladın və piton plaginlərim yenidən işləyir.


Ubuntu 18.04-də QGIS-i necə qururam?

Rəsmi QGIS quraşdırma sənədlərini izləmək bir az çətindir, çünki ətraflı bir nümunə vermir.

@zorkerz Ubuntu 15.04 üçün quraşdırma sualımın cavabını verdi. Bu təlimatları 18.04 tarixinə dəyişdirdim. Mənim yozum düzgündür?

QGIS-in ən yeni versiyasını yükləmək üçün /etc/apt/sources.list faylına QGIS depolarını əlavə edin:

Kursoru aşağıya doğru oxuyun və bu sətirləri daxil edin:

Bu əmrlərdən sonra, rəsmi QGIS quraşdırma səhifəsindəki aşağıdakı təlimatlarla aşağıdakılardan başlayaraq əməl etdim.

"Bundan sonra QGIS qurmaq üçün aşağıdakı əmrləri yazın:"

Barmaq izini doğrulama addımı tamamlayarkən çıxışın aşağıdakı hissəsi göründü:

gpg: düymə 51F523511C7028C3: itkin açar olduğuna görə 1 imza yoxlanılmayıb gpg: düymə 51F523511C7028C3: "QGIS Arxiv Avtomatik İmza Anahtarı (2019)" dəyişdirilməyib gpg: İşlənmiş ümumi sayı: 1 gpg: dəyişməyib: 1

Açarı əlavə edərkən, çıxışın aşağıdakı hissəsi ilə əlaqəli idi. Bu mənim üçün problemdir, yoxsa QGIS-in həlli üçün?

gpg: düymə 51F523511C7028C3: itkin açar olduğundan 1 imza yoxlanılmayıb


& # 39PyQt4.sip & # 39 adlı modul yoxdur

Səhvinizi çoxaltmağa çalışdım və əslində bunu bacardım. Debian sistemim var, ona görə qurmaq istədiyim bütün paketləri quraşdırmaq üçün apt istifadə etdim.

İnteraktiv piton mühitində çalışmağa çalışdım (pis terminologiyaya görə üzr istəyirəm, pitonda təcrübəli deyiləm: çox sadə riyaziyyat məsələlərini həll etmək üçün cəmi bir neçə dəfə istifadə etdim) kod

Problemi həll etmək üçün ilk cəhd, problemi həll etməyən pyqt4-dev-tools və pyqt4.qsci-dev paketlərinin quraşdırılması idi. Buna görə sistemimdə artıq quraşdırılmış olan python-qt4 paketini qurmağa çalışdım. Sonra da işləməyən python-qtpy quraşdırmağa çalışdım. Sonra bu sualı StackOverflow-da səhv python versiyasını istifadə etdiyimi düşündüyüm üçün səhv etdim (varsayılan olaraq python 3.7 istifadə edirəm), buna görə də yuxarıda göstərilən əmri bir python 2.7-də işlətməyə çalışdım və işlədi.

İndi python 3-ün dəstəyinin olmamasından məyus olduğum üçün qt və python 3 ilə əlaqəli başqa paketlər axtarmağa çalışdım və python3-qtpy tapdım. Bunu və əmri quraşdırdım. hələ də işə yaramadı. Ancaq qurarkən, qt kitabxanalarının 3-cü versiyasını qurduğunu gördüm, buna görə PyQt5.QtGui import * və interaktiv python 3 mühitində çalışmağa çalışdım. işlədi.

Bəzi qeydlər: Python3-sip-i python3-qtpy ilə birlikdə qurduğunu və bunun kömək edib etməyəcəyindən əmin olmayan python-sip paketini sistemimə artıq quraşdırdığımı gördüm. Bir başqa qeyd etmək istəyirəm ki, Debian-dan istifadə edirəm, ancaq paylamanızı təyin etməmisiniz. Bu, ümumiyyətlə bir problem olmayacaq, çünki python işləyən ƏS-dən asılı olmamalıdır, bununla birlikdə apt və Debian reposundan istifadə edərək bütün lazımi asılılıqları quraşdırmaq problemin həllində təsir edən bir dəyişən ola bilər. Daha əvvəl də qeyd etdiyim kimi, nadir hallarda python istifadə edirəm, amma bilirəm ki, yeni "paketlər" yükləmək üçün pip istifadə edə bilərsiniz və ya StackOverflow cavabı brew istifadə edir. Yoxlanacaq tək şey paketlərinizi quraşdırdığınız python versiyasıdır. EDİT: Ehtiyacınız varsa, pipdəki python qtpy versiya 4-ə və pipdəki python qtpy versiya 5-ə baxın

İndi idxal problemini həll etmək üçün nə etdiyimi izah edərkən mümkün qədər təfərrüatlı olmağa çalışdım, ancaq daha çox sualınız varsa, aşağıya bir şərh əlavə etməkdən çəkinməyin.


MT7601U usb dongle wifi sürücüsü ilə problem

Raspberry Pi B + üçün usb wifi dongle aldım və onu 3.18.3+ nüvəsi ilə RPi-də qura bilmirəm (OS: raspbian).

Heç bir uğurla izləmədiyim addımlar:

lsusb mənə bu nəticəni verin:

Github-da son kernel buraxılışını yüklədim və çıxardım: https://github.com/raspberrypi/linux/rpi-3.18.y.tar.gz

Bu təlimatları rpi-linux-3.18 qovluğunda səhvsiz etdi

sonra MTU7601U sürücüsünü MediaTek-dən aldım (fayl: DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2)

çıxarıldıqdan sonra & amp & amp; yükləməyə davam edin. İlk cəhdlərimdə rt_linux.h-də bir quruluşa sahib bir səhv səbəbindən düzgün çalışa bilmədim.

buna görə int-i kuid_t və kgid_t ilə əvəz edərək bu faylda bir yamaq düzəltdim (bəlkə də sürücü bunun səbəbini işləmir?)

Sonra bir daha & amp & amp make install qururam və (bir çox xəbərdarlıqla) sürücü tərtib etdim.

Və rpi-ni yenidən başladın. Ancaq usb wifi dongle-ı bağladığım zaman bu səhv olur:

Təkrar-təkrar yığmağa çalışdım, amma bu məsələ gəldi.

Kimsə bu sürücümü mənim versiyam üçün necə tərtib edəcəyini bilir və ya səhv etdiyimi bilirmi?


2 Cavablar 2

"Pip install" tövsiyəsi üçün təşəkkür edirik! Bu faydalıdır.

Hiss edirəm ki, çox bağışlayırsan. Bu məqamda doğru olan şeylər barədə daha güclü iddialarla çıxış etməyi üstün tutardım. Bəlkə 'file: ///x.txt' URL'lərini dəstəkləməyə çalışırsınız? Xeyr, mən buna inanmıram. Bir veb server ünvanını təhlil edə bilsəydik, bunların hər üçünün tədarük ediləcəyini və ya defolt ediləcəyini gözləyərdim, yoxsa 'itkin bir hissə' istisnası qaldırmalıyıq. Düşünürəm ki, hər üçü bütün vahid testləri üçün hazırdır.

Bəlkə dəyərin bəzən həqiqətən bayt olması lazım ola bilər, amma zəng edənlərin kodlaşdırma ilə təmkinli olmaması məni əsəbiləşdirir. Str ilə yapışmağa cəhd edə bilərsiniz, bunun nə təsir etdiyinə baxın və zəng edənləri daha diqqətli olmağa inandırın.

Ümumiyyətlə kodunuz asanlıqla oxunur, təşəkkür edirəm. Standart və satıcı kitabxanalarını belə ayırdınız. Kiçik nit: get_source (), PEP8 + operatorunun hər iki tərəfində boşluqlar istər. Flake8-in * .py üzərindən keçməsinə icazə verməyinizi məsləhət görürəm.

Şeylər (yaxşı adlanan) create_if_not_present () ilə maraqlı olmağa başlayır. Https://python-consul.readthedocs.io/en/latest/#consul.base.Consul.KV.put-dan bəhs edən bir şərhə fikir verməzdim, amma bunun səbəbi Konsul üçün yeni olduğum üçün ola bilər, bəlkə də həddini aşmaq. Bool növü faydalıdır, amma hələ qısa bir dokstring əlavə etməyə dəyər hiss edirəm:

Hmm, dön val.decode (), maraqlı, mənə bir şey öyrətdiyin üçün təşəkkür edirəm. Ümumiyyətlə utf8-i qeyd edirəm, amma bu, standartdır. _Decode_consul_data_value () 'a - & gt str: return type annotation görmək üçün narahat olmazdım.

_Monitor () dilində xahiş edirəm bu şəkildə ifadə edin:

(və ya k, i sonra dediyiniz kimi).

Fikir ondan ibarətdir ki, [KvConfigStore interfeysi] lazım olduqda [bir konsul olmayan] tətbiqetmə ilə dəyişdirilə bilər

Bu maraqlı bir qeyddir. Müəyyən bir rəqabətçi tətbiqdən bəhs etsəydi və xüsusən bunun üçün ilkin kod dəstəyi olsaydı daha çox inanardım. Ən çox şiddət, ikinci tətbiqetmə ilə ilk qarşılaşmada kodla baş verir. İşlədikdən sonra, 3-cü bir tətbiq üçün dəstək əlavə etmək böyük bir problem olmayacaqdır. Aldığınız riskin azaldılması barədə bir fikir əldə etmək istəsəniz, indi ikinci bir tətbiqə dəstək verməyinizi məsləhət görürəm. Ancaq konsulun ehtiyaclarınız üçün yaxşı bir uyğunlaşacağına və bu "dəyişdirmə" hədəfinin sizin üçün vacib bir hədəf olmadığına, hədəfə yenidən baxmağın daha yaxşı olacağına şübhə edirəm sonra keçməli olduğunuz xüsusi bir körpü var.

BackgroundTask kifayət qədər gözəl görünür.

TestConsulServer-nin is_open_port () və find_free_port () hər ikisi .close () çağırır, bu da a bəndlə əlavə edə biləcəyinizi göstərir.

Nöqtəli dördlü sabit kod a deyil böyük siğil, lakin onu aradan qaldırmaq üçün quraşdırma qura bilər və sonra netifaces.ifaddresses ('eth0') [AF_LINK]

Yəqin ki, setUpClass-ın bu tez-tez istifadə olunan dəyəri saxlamasını istəyirsiniz: 'localhost:% s'% self.consul_server.api_port

Test əhatə dairəsi çox yaxşı görünür. Təsəvvür edirəm ki, əhatə dairəsi ölçmələri əsasən yaşıl rəngdə olur. Bu, çox yaxşı bir kitabxana kodu.


Python lüğətlərini h5py istifadə edərək HDF5 Dosyalarına rekursiv olaraq yadda saxlayın

H5py modulundan istifadə edərək HDF5 formatında faylların saxlanması metodunu tətbiq etdiyim bir qrup xüsusi dərsim var.

Biraz arxa plan: Əvvəlcə hər bir sinifdəki məlumatları xüsusi məlumat növlərini ehtiva edən bir lüğət olaraq təmsil edən bir serializasiya interfeysi tətbiq etməklə həyata keçirdim (bu anda nümayəndəliklər yalnız numpy.ndarray, numpy.int64, numpy ola bilər .float64, str və digər lüğət nümunələri). Bu məhdudiyyətin üstünlüyü ondadır ki, lüğətləri h5py defolt olan məlumat tiplərinə salır. Lüğətlərin HDF5 sənədlərinə rekursiv olaraq qənaətinə dair kod dərsliklərinin çatışmazlığını tapdığım üçün təəccübləndim, buna görə tətbiqetməyimlə əlaqədar geribildiriminizi çox qiymətləndirərdim.

Məlumatların saxlanılması:

Məlumat yüklənir:

Bu, lüğətlərin bütövlüyü ilə saxlanılması və yüklənməsi üçün vahid testlərimdən keçir. Ancaq həqiqətən bunun Pythonic olduğunu bilmirəm və rəyləri qiymətləndirəcəyəm. Bir HDF5 etiketi buraxmağa çalışdım, amma formatı daha yaxşı tanıyan və h5py ilə tanış olan yoxdur, bəlkə bunun daha zərif və ya idiomatik bir yolu olub olmadığını deyə bilər (istəmirəm) bunu qoruyacaq növbəti tələbəni qarışdırmaq üçün) və ya hər hansı bir pis sürpriz üçün hazırlaşsam.


2 Cavablar 2

Mexanik bir röldən fərqli olaraq, bir AC SSR, əlil olduqda AC yük kontaktlarını elektriklə təcrid etmir.

Kontaktları arasında bir hava boşluğu deyil, bir sızma axını ilə bir triak var. Nümunə olaraq, yeni axtardığım 10 A elektrik şəbəkəsində 1 mA 'off' sızma axını var. (Daxili snubber dövrəsi quraşdırılmış versiya üçün 10 mA-dır, ancaq bu sizin üçün snubberlərdir.) Bu SSR-nin 1 mA qaçaq cərəyanı ölümcül hesab edilmir, lakin ağrılı və zərərli bir elektrik çarpması vermək üçün kifayətdir.

Buna görə elektrik izolyasiyası və təhlükəsizlik tələbləri nəzərə alınmalıdır. Cihazı dəyişdirərkən və ya bağlayarkən elektrik təhlükəsizliyini nəzərə almaq asandır.

Yük artıq elektriklə təcrid olunmuşsa və CE / UL / CSA / etc tələblərinə uyğun olaraq cərəyanına fiziki olaraq toxunula və ya əldə edilə bilmirsə, onda SSR istifadə etməyi düşünə bilərsiniz. Əks təqdirdə, edə bilməzsiniz.

AC motorlarını idarə etmək üçün ofis avadanlıqlarında AC SSR istifadə etdim. Daxili motoru söndürmək və söndürmək üçün SSR istifadə etmək yaxşı idi, çünki mühərrik naqilləri və əlaqələri hamısı kifayət qədər təsdiq edilmiş materiallarla ikiqat izolyasiya edilmiş və hamısı istifadəçi üçün əlçatmaz idi.

Daha sonra elektron əyləc üçün ya AC ya da DC-ni motora yönəltməyim lazım olduqda, AC və ya DC-yə keçid mexaniki bir röle ilə edilməli idi. Mövcud SSR-dən istifadə edərək qatı bir dövrə istifadə edə bilmədim, çünki qismən SSR-nin sızma cərəyanı həqiqətən AC təchizatı kəsməyəcəkdi, əksər hallarda bir SSR-nin uğursuzluğu AC-ni DC təchizatı dövranına salacaqdı. Belə bir uğursuzluq, avadanlıqların cavab verməli olduğu təhlükəsizlik standartlarına görə bir ehtimal hesab olunur.


Iptables mport modulu tapılmadı

Pomidoru işləyən bir simsiz yönləndiricini / firewall'u Debian server ilə əvəz edirəm və birbaşa yeni serverə idxal edə biləcəyim üçün pomidorun iptables konfiqurasiyasını tapdığım üçün həyəcanlandım (bundan əvvəl sualım). Pomidordan olan iptables konfiqurasiya faylı (aşağıda) Debian-da iptables-bərpa etmir:

Mportu "müasir" iptables-a daxil etməyin bir yolu varmı?
Yoxsa xahiş edirəm mport-u çoxportlaşdırmaq üçün tərcümə etməyimə kömək edə bilərsən?

IPptables mport üçün googling olduqca kobud idi, amma nəticədə mportdan şikayətçi olan birinin getdiyini və mport uzantısına istinad edərək çoxportlu təlimat tapdım, bu da modullar üçün iki qutunun fayl sistemlərini gözdən keçirməyimə və hər bir "firewall" alətini Debian-ı sınamağımı təmin etdi. birinin sehrli bir şəkildə mport ilə gəlməsini istəyən var. Pomidorun istifadəçi interfeysi ilə korlandığımı etiraf edirəm - bu vaxtdan bəri sınadığım hər Debian paketi məni getdikcə daha çox qarışdırdı (gui və ya cli). Serverdən hər şeyi qısaca yönləndirməsini istəsəydim, düşünürəm ki, mason işləyə bilər. Təəccüblü deyil ki, hər kəs iptables-dan nifrət edir.

Səhvləri anlamağa çalışmalı olduğumdan daha çox vaxt sərf etdim. İptables-ləri anlamaq üçün o qədər vaxt sərf etsəydim, ehtimal ki, mport qaydalarını çoxlu hesabata çevirə bilərdim. Bundan əlavə, SuperUser-ə yazı göndərməyi düşündüm, ancaq bir neçə iptable etiketli sual burada ServerFault-da oxuduğum suallarla eyni liqada deyildi.

Modul axtarırsınız:
Pomidor proqramı ilə simsiz yönləndiriciyə daxil oldum, libipt_mport.so modulunu / usr / lib / iptables-da tapdım. Ancaq /lib/modules/2.4.20/kernel/net/ipv4/netfilter qovluğunda libipt_mport.so yoxdur, yalnız ipt_multiport.o var.

Debian qutusunda (təzə hırıltılı quraşdırma), MASQ-da (MASQUERADE obyekti üçün) axtarış etmək üçün updatedb istifadə etdim və qovluğu tapdım
/lib/modules/3.2.0-4-amd64/kernel/net/ipv4/netfilter yaxşı bir iptable_ * və nf_nat_ * ko fayllarına malikdir. Axtarışda / lib / xtables-da libxt_multiport.so da tapıldı, lakin mport üçün obyekt modullarına istinad yoxdur.

Əlavə olaraq aşağıda başqa problemlər varmı? 7-ci təbəqəni görürəm və bundan sonra daha çox komplikasiyaya səbəb olacağını hiss edirəm.

Pomidorun konfiqurasiya faylı:
Qeydlər:
»99.1.81.209 WAN ipdir
»10.0.0.2 bu Debian firewall üçün ipdir
»10.0.0.20 bir serverdir
»Pomidorun ümumi interfeysi vlan0 eth0 olaraq dəyişdirildi
»Pomidorun daxili interfeysi br0 eth1 olaraq dəyişdirildi
»5060: 5090 portları VoIP üçündür (ehtimal ki, bu aralığa ehtiyacınız yoxdur?)


4 Cavablar 4

Budur, primitivləri rastr, mesh və hamar kimi birləşdirən bir yanaşma.

Genişləndirilmiş giriş və çıxışı olan primitivlər:

İndi modeli rasterləşdirək. Keyfiyyətli bir rasterizasiyanı təmin etmək üçün hər kapsulu ayrı-ayrılıqda rasterləşdirəcəyəm və onları birləşdirəcəyəm:

Bu görüntünün tamamlayıcı hissəsini istəyirik:

İndi məlumatları birləşdirin. İçəridə göstərmək üçün buranı kəsdim:

Bu olduqca yaxşı görünür, və 3D çap kimi tətbiqetmələr üçün kifayətdir, lakin düzəldə biləcəyimiz bəzi əsərlər var. Bir yanaşma, burada müəyyən edilmiş GraphDiffusionFlow istifadə etməkdir, amma qapaqları gözəl bir şəkildə düzəldən parametrləri tapa bilmədim.

Bunun əvəzinə irəli getdim və burada göstərilən yanaşmanın bir versiyasını tətbiq etdim. Bunun kodu postun altındadır.

Bu bir az daha yaxşı görünür, lakin kubun xarici hissəsi çox yumşaq kənarlara malikdir:

Bunu kəsmə yolu ilə düzəldə bilərik:

Bu labirentin çapına müqavimət göstərə bilmədim

və qida boyası ilə həll etmək.


Başlamaq üçün argv [0] -nin mütləq proqram adı olmadığını unutmayın. Arayan, sistemin çağırışının argv [0] içərisinə qoyduğu şeydir (məsələn, bu sualı Stack Overflow-a baxın). (Exec-in bütün digər variantları sistem çağırışları deyil, icra ediləcək interfeyslərdir.)

Məsələn, aşağıdakıları fərz edək (execl istifadə edərək):

/ var / tmp / mybackdoor icra olunan şeydir, lakin argv [0] üstə qoyulur və bu, ps və ya (həqiqi) topun göstərəcəyi şeydir. Bu barədə daha çox məlumat üçün U & ampL SE-də bu cavaba baxın.

Bunların hamısını bir kənara qoymaq: / proc kimi xülya fayl sistemlərinin yaranmasından əvvəl argv [0] bir müddətin öz adını öyrənməsinin yeganə yolu idi. Bu nə üçün yaxşı olardı?

  • Bir neçə proqram, çağırıldıqları addan asılı olaraq davranışlarını fərdiləşdirir (ümumiyyətlə simvolik və ya sərt əlaqələrlə, məsələn BusyBox-un yardım proqramları, bu sualın digər cavablarında daha çox nümunə verilir).
  • Üstəlik, syslog-dan daxil olan xidmətlər, daemonlar və digər proqramlar adlarını əksər hallarda ad girişlərini giriş girişlərinə əlavə edirlər, hadisələrin izlənməsi əlçatmaz olacaqdır.

  • Argv [0] sh olduqda Bash POSIX rejimində işləyir. Argv [0] - ilə başlayan zaman giriş qabığı kimi işləyir.
  • Vim, view, evim, eview, ex, vimdiff və s. Kimi işləyərkən Vim fərqli davranır.
  • Busybox, artıq qeyd olunduğu kimi.
  • İnit kimi systemd olan sistemlərdə bağlama, yenidən başlatma və s. Systemctl ilə əlaqələndirilir.
  • və sair.

Tarixən argv yalnız komanda xəttinin "sözləri" üçün bir sıra göstəricilərdir, buna görə proqramın adı ilə baş verən ilk "söz" ilə başlamaq məntiqli olur.

Və onları adlandırmaq üçün istifadə olunan ada görə fərqli davranan bir neçə proqram var, belə ki, onlara fərqli bağlantılar yarada və fərqli "əmrlər" əldə edə bilərsiniz. Düşünə biləcəyim ən həddindən artıq nümunə, necə adlandırıldığından asılı olaraq bir neçə on müxtəlif "əmr" kimi çıxış edən busyboxdur.

Redaktə edin: Tələb olunduğu kimi Unix 1-ci buraxılış üçün istinadlar

Biri məsələn görə bilər. cc-nin əsas funksiyasından argc və argv artıq istifadə edilmişdir. Qabıq, əmrin özü ilə arqumentlərlə eyni şəkildə davranarkən, arqumentləri döngünün yeni hissəsinin içərisindəki parbufa köçürür. (Əlbətdə, daha sonra əmrin adı olan yalnız ilk arqumenti icra edir). Görünür execv və qohumlar o zaman yox idi.

Çağırılmalarına görə davranışlarını dəyişdirən proqramlara əlavə olaraq, bir proqramın istifadəsini çap etməkdə argv [0] kimi faydalı tapıram:

Bu, istifadə mesajının həmişə çağırıldığı addan istifadə etməsinə səbəb olur. Proqramın adı dəyişdirilirsə, istifadə mesajı onunla birlikdə dəyişir. Hətta adlandığı yol adını da özündə ehtiva edir:

Xüsusilə hər yerdə yaşaya biləcək kiçik xüsusi təyinatlı alətlər / ssenarilər üçün gözəl bir toxunuşdur.

Bu, GNU alətlərində də geniş yayılmış təcrübə kimi görünür, məsələn ls-ə baxın:

Proqramın adını istifadə edə bilərsiniz proqram davranışını dəyişdirmək.

Məsələn, həqiqi ikili üçün bəzi simvollar yarada bilərsiniz.

Bu texnikanın tətbiq olunduğu məşhur bir nümunə, yalnız bir ikili və ona çox sayda işarələr quraşdıran busybox layihəsidir. (ls, cp, mv, vs.). Bunu edirlər saxlama yerindən qənaət etmək çünki hədəfləri kiçik yerləşmiş cihazlardır.

Bu util-linux-dan setarch-da da istifadə olunur:

Budur, bu texnikanı əsasən istifadə edirlər bir çox təkrarlanan mənbə sənədlərindən qaçınmaq ya da sadəcə mənbələrin daha oxunaqlı olması üçün.

Digər bir istifadə vəziyyəti, bəzi modulları və ya məlumatları iş vaxtında yükləməsi lazım olan bir proqram ola bilər. Proqram yoluna sahib olmaq sizi bacarır proqramın yerləşdiyi yerə nisbətən modulları bir yoldan yükləmək.

Üstəlik bir çox proqram proqram adı daxil olmaqla səhv mesajlarını çap edin.

argv, yeni proqrama ötürülmüş bir sıra arqument sətiridir. Konvensiyaya görə, bu sətirlərin birincisi icra olunan faylla əlaqəli fayl adını ehtiva etməlidir.

Əgər argc dəyəri sıfırdan böyükdürsə, argv [0] tərəfindən göstərilən sətir proqram adını təmsil edir argv [0] [0], proqramın adı ev sahibi mühitdə olmadıqda sıfır simvol olacaqdır.


Videoya baxın: QGIS Python PyQGIS - Calculate Field Values Field Calculator (Oktyabr 2021).