Daha çox

Python kodumun əvvəlində arcpy.env.workspace ayarlamalıyam?

Python kodumun əvvəlində arcpy.env.workspace ayarlamalıyam?


Arcpy ilə yeniyəm və AddField_management və updateCursor kimi sadə tapşırıqları yerinə yetirirəm. Ancaq səhvlər 99999 və s. Kimi səhv mesajları alırdım. Aldığım səhvlər şemanın kilidi və ya təbəqənin təzələnməməsi ilə əlaqədardır. Buna görə kodun bir hissəsini işlədib mxd'imi bağlayıb yenidən açmalıyam, bunu dəfələrlə etməliyəm.

Yəqin ki, səhv bir şey edirəm və ya bir şeyi unuduram. Məsələn, mənəm yox env.workspace və ya in_memory ayarı və ya temp _lyr faylları yaratmaq. Bu başdan sona qədər istifadə etdiyim sadə bir kodun nümunəsidir.

inFeatures = "MyLayer" sahələri = ['x', 'y'] # Sahələrdəki sahə üçün sahələrinizi əlavə edin: arcpy.AddField_management (inFeatures, str (field), "DOUBLE") with arcpy.da.UpdateCursor (inFeatures) , ('x', 'y', "shape @")) kursor kimi: kursordakı sıra üçün: sıra [0] = sıra [2] .firstPoint.X sıra [1] = sıra [2] .lastPoint.X cursor.updateRow (sıra)

Aşağıdakı səhvləri alıram, 'x' 'y' wasnt tərəfindən yaradıldı. Mxd-ni bağlayıb yenidən açdım və 'y' sahəsini görə bilərəm. İndi UpdateCursor'u işə saldım, heç bir şey dəyişmir (hələ də Null> dəyərlərinə baxın). Və ya səhv edirəm

Mövcud olmayan bir sütun göstərilib

Mxd-i bağlayıram, yenidən açıram və yenilənmiş sütunları görə bilərəm. Bu, bütün kodlarım üçün baş verir, yalnız bu deyil (yəni təravətləndirmir). Sualım budur ki, hər zaman, env.workspace-i qurmaq üçün ehtiyacım varmı? ArcGIS 10.1-i işləyirəm, fayllar xüsusiyyət məlumat dəstləridir, ArcGIS-də Python pəncərəsini istifadə edir, fayl yolu uzun deyil, təbəqələrdə boşluq yoxdur.


Əsas kodunuz çox yaxşıdır. Şərhlərimə görə:

arcpy.da.UpdateCursor (inFeatures, ('x', 'y', "shape @"))

olmalıdır

arcpy.da.UpdateCursor (inFeatures, ['x', 'y', 'shape @'])

Kvadrat mötərizələr onu alətin gözlədiyi bir siyahıya çevirir.

Şema kilidləri eyni məlumatları birdən çox mənbədə açıq olduğunuzda və ya bir imleci qapalı qoyub istifadə edərək tərk etdiyiniz zaman meydana gəliriləkursorun düzgün bağlanmasını təmin edir. Kilidlərdən istifadə edərək səhv yoxlanmasını da daxil edə bilərsinizcəhd edin: istisna olmaqla:bloklar.

Bir təbəqə obyektinə bir sahə əlavə edərkən yeni sahənin təbəqədə əlçatmaz olması qeyri-adi deyil, buna görə də sahəni məlumat mənbəyinə əlavə edib qatı yenidən düzəldin. Məlumat mənbəsini təbəqə obyektlərinin xüsusiyyətlərindən biri olduğu üçün təbəqədən ala bilərsiniz.

import arcpy, sys inFeatures = "MyLayer" sahələri = ["x1", "x2"] # onsuz da sətirlər, daha sonra str () etmək lazım deyil ds = inFeatures.dataSource dq = inFeatures.definitionQuery # etmək üçün istifadə edilən sorğu qat # Sahələrdəki sahə üçün inFeatures-a sahələr əlavə edin: cəhd edin: arcpy.AddField_management (ds, field, "DOUBLE") istisna olmaqla: arcpy.AddError ("Sahə əlavə edilə bilmir" + alan) sys.exit (-1) # tərk skript # arcpy.Delete_management ("MyLayer") # qatını yenidən hazırlayın # arcpy.env.overwriteOutput = True arcpy.MakeFeatureLayer_management (ds, "MyLayer", dq) # arcpy.da ilə qurarsanız bunu etməyinizə ehtiyac yoxdur .UpdateCursor (inFeatures, ['x', 'y', "shape @"]) kursor kimi: # bunun başqa bir yolu: arcpy.da.UpdateCursor ilə fields.append ("şekil @") (inFeatures, sahələr) kursor kimi: kursordakı sıra üçün: sıra [0] = sıra [2] .firstPoint.X # birinci nöqtə sətirinin X koordinatı [1] = sıra [2] .lastPoint.X # son nöqtənin x koordinatı cursor.updateRow ( sıra)

Qurmaq lazım deyilarcpy.env.workspaceQuraşdırma zamanı ev qovluğunuza qoyulmuş olan (C: Users your_name Documents ArcGIS Default.gdb) geoloji işləmə mühitində əvvəlcədən qurulmuş olanın standart olması.

İş sahəsinin göstərilməsi yalnız xüsusiyyət siniflərinin adlarını (yolları deyil) qaytaran ListFeatureClasses kimi funksiyalar üçün vacibdir; tam bir yol olmadan hər hansı bir giriş / çıxış mövcud iş sahəsinə istinad edildiyi düşünülür, buna görəarcpy.MakeFeatureLayer ("data", "data_layer")cari iş yerinizdə qatı yaratmaq üçün "məlumat" adlı bir xüsusiyyət sinfi axtaracaq - bu hallarda bəzi yazılara qənaət edə bilər.


Emir Sürmenin cavabına əlavə edərək, serverdəki bütün mətn kanallarını toplaya, yalnız id-ləri ilə yeni bir siyahı hazırlaya və sonra yoxlaya bilərsiniz:

və ya bu xətt boyunca bir şey.

Əmrinizin daxilində wait_for () funksiyasından istifadə edə bilərsiniz. Budur kiçik bir nümunə:

Bununla birlikdə, kanal identifikatorunu özünüz əldə etməlisiniz. Bu misal & quothello & quot üçün yoxlayır.


Stdin üçün texnikaların əksəriyyəti istismar sətrini girişə xitam verildikdən qısa müddət sonra sona çatacaq proqrama göndərəcəkdir. Daha sonra açıq saxlamağın və aktiv bir qabığın alınmasının ən yaxşı yolu, stdin-də giriş gözləyən bir pişik əlavə etməkdir. Bir fayla baxsanız belə görünməlidir:

Və ya bir shell əmri istəyirsinizsə, bu kimi:

Və ya nəhayət, şəbəkədən keçirsinizsə:

Diqqət yetirin ki, yük yükü çatdırıldıqdan sonra girişin açıq qalması üçün gdb ilə necə edəcəyimi tapmadım.


Mühitlərlə işləyin

Virtual mühit yaradın

Virtual mühit yaratmaq üçün, & quot.venv & quot mühit qovluğunun adı olduğu aşağıdakı əmrdən istifadə edin:

Qeyd: Venv modulu haqqında daha çox məlumat əldə etmək üçün Python.org saytında virtual mühitlərin yaradılmasına baxın.

Yeni bir virtual mühit yaratdığınız zaman, iş sahəsi üçün seçməyinizə imkan verən bir bildiriş görünəcəkdir.

Bu, yeni virtual mühitdən Python tərcüməçisinə iş yerinizin parametrlərinə gedən yolu əlavə edəcəkdir. Bu mühit daha sonra paketlər quraşdırarkən və Python uzantısı vasitəsilə kod işləyərkən istifadə ediləcəkdir. Layihələrdə virtual mühitdən istifadə nümunələri üçün Python, Django və Flask təlimlərinə baxın.

İpucu: Tətbiqi digər kompüterlərə yerləşdirməyə hazır olduğunuzda pip freeze & gt requirements.txt (macOS / Linux-da pip3) əmri ilə Request.txt faylı yarada bilərsiniz. Tələblər faylı, virtual mühitdə quraşdırdığınız paketləri təsvir edir. Yalnız bu sənədlə siz və ya digər inkişaf etdiricilər pip install -r requirements.txt (və ya yenə də macOS / Linux-da pip3) istifadə edərək bu paketləri bərpa edə bilərsiniz. Tələblər sənədini istifadə edərək, virtual mühitin özünü mənbə nəzarətinə götürməyinizə ehtiyac yoxdur.

Conda mühiti yaradın

Python uzantısı, mühitdə bir Python tərcüməçisi olması şərti ilə mövcud konda mühitləri avtomatik olaraq algılar. Məsələn, aşağıdakı əmr Python 3.4 tərcüməçisi və VS Kodunun mövcud tərcüməçilər siyahısında göstərdiyi bir neçə kitabxana ilə bir mühit mühiti yaradır:

Bunun əksinə olaraq, conda create --name env-00 ilə olduğu kimi bir tərcüməçi təyin edə bilmirsinizsə, mühit siyahıda görünmür.

Conda əmr satırı haqqında daha çox məlumat üçün Conda mühitlərinə baxın (conda.io).

VS Kodu işləyərkən yeni bir mühit mühiti yaratırsınızsa, istifadə edin Pəncərəni yenidən yükləyin ilə göstərilən mühit siyahısını yeniləmək əmri Python: Tərcüməçi seçin əks halda orada mühiti görə bilməzsiniz. Əvvəlcə görmürsənsə, görünməsi qısa bir müddət çəkə bilər, 15 saniyə gözləyin və əmrdən yenidən istifadə etməyə çalışın.

Ətraf mühitin qabıq baxımından yaxşı bir şəkildə qurulmasını təmin etmək üçün seçimlərdən biri, kodu istifadə edərək VS Kodunu işə salmaq üçün aktivləşdirilmiş mühit ilə Anaconda istemi istifadə etməkdir. əmr. Bu nöqtədə yalnız Komanda Paletindən istifadə edərək və ya vəziyyət çubuğuna basaraq tərcüməçi seçməlisiniz.

VS Kodu üçün Python uzantısının hal hazırda conda environment.yml faylları ilə birbaşa inteqrasiyası olmasa da, VS Code özü də böyük bir YAML redaktorudur.

Varsayılan qabıq PowerShell olaraq təyin olunduqda, Conda mühitləri VS Kodu İnteqrasiya olunmuş Terminalda avtomatik olaraq aktivləşdirilə bilməz. Kabuğu dəyişdirmək üçün İnteqrasiya edilmiş terminal - Konfiqurasiya bölməsinə baxın.

Aktivləşdirmə üçün istifadə ediləcək conda yürütülə bilən yolu əl ilə təyin edə bilərsiniz (versiya 4.4+). Bunu etmək üçün Komanda Paletini açın (⇧⌘P (Windows, Linux Ctrl + Shift + P)) və daxil edin Tercihlər: İstifadəçi parametrlərini açın. Sonra istifadəçi parametrlərinin Python genişləndirmə hissəsində olan python.condaPath-ı uyğun yolla təyin edin.

Bir mühiti seçin və aktivləşdirin

Varsayılan olaraq, Python uzantısı sistem yolunda tapdığı ilk Python tərcüməçisini axtarır və istifadə edir. Müəyyən bir mühit seçmək üçün istifadə edin Python: Tərcüməçi seçin əmri Komanda palitrası (⇧⌘P (Windows, Linux Ctrl + Shift + P)).

Qeyd: Python uzantısı bir tərcüməçi tapmasa, xəbərdarlıq edir. MacOS-da, əlavə olaraq OS-də quraşdırılmış Python tərcüməçisini istifadə edirsinizsə, xəbərdarlıq da edir, çünki ümumiyyətlə birbaşa quraşdırdığınız tərcüməçidən istifadə etmək istəyirsiniz. Hər iki halda da, istifadəçi ayarlarınızda python.disableInstallationCheck-i true olaraq təyin edərək bu xəbərdarlıqları deaktiv edə bilərsiniz.

Mühitləri istənilən vaxt dəyişə bilərsiniz. Mühitləri dəyişdirmək, layihənizin fərqli hissələrini ehtiyac duyulduğu kimi fərqli tərcüməçilər və ya kitabxana versiyaları ilə sınamağınıza kömək edir.

The Python: Tərcüməçi seçin əmri mövcud qlobal mühitlərin, uyğun mühitlərin və virtual mühitlərin siyahısını göstərir. (Bu tip mühitlər arasındakı fərqlər daxil olmaqla ətraflı məlumat üçün uzantının ətraf mühitləri axtardığı yerə baxın.) Aşağıdakı şəkil, məsələn, bir conda mühiti və bir virtual mühit (env) ilə birlikdə bir neçə Anaconda və CPython qurğusunu göstərir. iş sahəsi qovluğunda:

Qeyd: Windows-da, VS Kodunun mövcud kondisioner mühitlərini aşkar etməsi bir az vaxt ala bilər. Bu müddət ərzində bir mühitə gedən yoldan əvvəl & quot (önbelleğe alınmış) & quot görə bilərsiniz. Etiket VS Kodunun hazırda bu mühit üçün önbelleğe alınmış məlumatlarla işlədiyini göstərir.

Siyahıdan bir tərcüməçi seçmək, python.pythonPath üçün iş sahəsi parametrlərinizdəki tərcüməçiyə gedən yol ilə bir giriş əlavə edir. Yol iş sahəsi parametrlərinin bir hissəsi olduğundan, bu iş sahəsini açdığınız zaman eyni mühit artıq seçilməlidir. Tətbiqləriniz üçün standart bir tərcüməçi qurmaq istəyirsinizsə, bunun əvəzinə İstifadəçi Ayarlarınızın içərisinə python.pythonPath üçün bir giriş əlavə edə bilərsiniz. Bunu etmək üçün Komanda Paletini açın (⇧⌘P (Windows, Linux Ctrl + Shift + P)) və daxil edin Tercihlər: İstifadəçi parametrlərini açın. Sonra, istifadəçi parametrlərinin Python genişləndirmə hissəsində olan python.pythonPath-ı müvafiq tərcüməçi ilə təyin edin.

Python uzantısı, Python kodunu işə salmaq üçün seçilmiş mühitdən istifadə edir Python: Python Faylını Terminalda çalıştırın əmri), redaktorda bir .py faylı açıq olduqda dil xidmətləri təqdim etmək (avtomatik tamamlama, sintaksis yoxlama, linting, formatlama və s.) və terminal açmaqla Terminal: Yeni Integrated Terminal yaradın əmr. Sonuncu halda, VS Kodu seçilmiş mühiti avtomatik olaraq aktivləşdirdi.

İpucu: Seçilmiş bir mühitin avtomatik aktivləşdirilməsinin qarşısını almaq üçün settings.json dosyanıza & quotpython.terminal.activateEnvironment & quot: false əlavə edin (mövcud parametrlərə qardaş olaraq hər yerdə yerləşdirilə bilər).

İpucu: Aktivləşdir əmri & quotActivate.ps1 mesajı yaradırsa rəqəmsal imzalanmamışdır. Bu skripti cari sistemdə işlədə bilməzsiniz. & Quot; sonra skriptlərin işləməsinə icazə vermək üçün PowerShell icra siyasətini müvəqqəti olaraq dəyişdirməlisiniz (bax PowerShell sənədlərindəki İcra Siyasətləri haqqında): Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

QeydVarsayılan olaraq, VS Kod kodu ayıklanırken python.pythonPath ayarı ilə təyin olunmuş tərcüməçidən istifadə edir. Hata ayıklama konfiqurasiyasının pythonPath xüsusiyyətində fərqli bir yol göstərərək bu davranışı ləğv edə bilərsiniz. Hata düzəltmə mühiti seçin.

Status çubuğu həmişə mövcud tərcüməçini göstərir.

Vəziyyət çubuğu, tərcüməçi seçilmədikdə də əks etdirir.

Hər iki halda da, Status Çubuğunun bu sahəsini vurmaq üçün əlverişli bir qısayoldur Python: Tərcüməçi seçin əmr.

İpucu: VS kodunun bir virtual mühiti tanıması ilə bağlı hər hansı bir probleminiz varsa, xahiş edirəm səbəbi müəyyənləşdirməyə kömək edə biləcəyimiz bir uzantı deposuna bir problem yazın.

Tərcüməçini əl ilə göstərin

VS Kodu istifadə etmək istədiyiniz bir tərcüməçini avtomatik olaraq tapmırsa, iş yolunu Settings.json sənədinizdə əl ilə təyin edə bilərsiniz. Ardınca gələn hər hansı bir girişlə, satırı digər mövcud parametrlərə qardaş olaraq əlavə edə bilərsiniz.)

Əvvəlcə Fayl (Kod macOS-da) & gt Tercihlər & gt Parametrlər Ayarlarınızı açmaq üçün menyu əmri (⌘, (Windows, Linux Ctrl +,)) seçin İş sahəsi.

Sonra aşağıdakı addımlardan birini edin:

Python.pythonPath üçün Python yürütülebilir proqramına tam yol ilə bir giriş yaradın və ya dəyişdirin (settings.json-ı birbaşa redaktə edirsinizsə, aşağıdakı sətri parametr olaraq əlavə edin):

Virtual bir mühiti göstərmək üçün python.pythonPath istifadə edə bilərsiniz, məsələn:

$ Sintaksisini istifadə edərək yol ayarında bir mühit dəyişənindən istifadə edə bilərsiniz . Məsələn, tərcüməçiyə aparan bir yol ilə PYTHON_INSTALL_LOC adlı dəyişən yaratmısınızsa, aşağıdakı ayar dəyərindən istifadə edə bilərsiniz:

Qeyd: Dəyişən əvəzləmə yalnız VS Kod ayarları fayllarında dəstəklənir, .env mühit sənədlərində işləməyəcəkdir.

Bir mühit dəyişənindən istifadə edərək, yolların fərqli olduğu əməliyyat sistemləri arasında bir layihəni asanlıqla köçürə bilərsiniz, yalnız əvvəlcə əməliyyat sistemindəki mühit dəyişkənini təyin etdiyinizdən əmin olun.

Mühitlər və Terminal pəncərələri

İstifadə etdikdən sonra Python: Tərcüməçi seçin, həmin tərcüməçi bir faylı sağ vurub seçərkən tətbiq olunur Python: Python Faylını Terminalda çalıştırın. İstifadə etdikdə mühit də avtomatik olaraq aktivləşdirilir Terminal: Yeni Integrated Terminal yaradın python.terminal.activateEnvironment ayarını yalnış olaraq dəyişdirmədiyiniz halda əmr.

Bununla birlikdə, müəyyən bir Python mühitinin aktivləşdirildiyi bir qabıqdan VS Kodunu işə salmaq, bu mühiti avtomatik olaraq inteqrasiya olunmuş Terminalda aktivləşdirmir. İstifadə edin Terminal: Yeni Integrated Terminal yaradın VS kodu işlədikdən sonra əmr.

Qeyd: conda mühitləri inteqrasiya edilmiş terminalda avtomatik olaraq aktivləşdirilə bilməz, əgər PowerShell inteqrasiya edilmiş qabıq kimi qurulubsa. Qabığın dəyişdirilməsi üçün İnteqrasiya edilmiş terminal - Konfiqurasiya bölməsinə baxın.

Terminal içərisində aktiv bir mühitdə etdiyiniz bütün dəyişikliklər davamlıdır. Məsələn, conda install & ltpackage & gt istifadə edərək bir conda mühiti aktiv olan terminaldan paketi bu mühitə qalıcı olaraq quraşdırır. Eynilə, bir virtual mühitin aktiv olduğu bir terminalda pip install istifadə edərək paketi həmin mühitə əlavə edir.

Tərcüməçiləri dəyişdirmək Python: Tərcüməçi seçin əmri artıq açıq olan terminal panellərinə təsir göstərmir. Beləliklə, ayrı bir mühiti split terminalda aktivləşdirə bilərsiniz: ilk tərcüməçini seçin, bunun üçün bir terminal yaradın, fərqli bir tərcüməçi seçin, sonra terminalın başlığında split düyməsini (⌘ (Windows, Linux Ctrl + Shift + 5)) istifadə edin. bar.

Ayıklama mühiti seçin

Varsayılan olaraq, python.pythonPath ayarı ayıklama üçün istifadə edəcəyi Python tərcüməçisini təyin edir. Bununla birlikdə launch.json ayıklama konfiqurasiyasında bir pythonPath xüsusiyyətiniz varsa, bunun əvəzinə həmin tərcüməçi istifadə olunur. Daha spesifik olmaq üçün VS Kodu hansı tərcüməçidən ayıklama üçün istifadə ediləcəyini təyin edərkən aşağıdakı üstünlük qaydasını tətbiq edir:

  1. launch.json-da seçilmiş ayıklama konfiqurasiyasının pythonPath xassəsi
  2. python.pythonPath ayarı iş yerində settings.json
  3. istifadəçi parametrlərindəki python.pythonPath ayarı.json

Ayıklama konfiqurasiyası haqqında daha ətraflı məlumat üçün, Ayıklama konfiqurasiyalarına baxın.


Xarici cihazdan məlumatların oxunması

Məlumat oxumaqda biraz köməyə ehtiyacım var. Vəziyyətimdə, USB ilə RPi-yə qoşulmuş bir Arduino Uno var. Arduino RPi-yə məlumat göndərir Serial.write (). Arduino, hər oxunma dövrü üçün 128 bayt nəticə verir.

Çıxışı istehsal edən Arduino kodunun bir hissəsi belə görünür:

Hal-hazırda Python kodum belədir:

İstifadə etməyə çalışdım ser.read () amma əldə etdiyim nəticə bir dəst simvoldur. Arduinodakı kodu dəyişdirsəm Serial.println () Mən məlumatları oxuya bilərəm ser.readline () RPi tərəfində, lakin alınan məlumatların bir dövrdə 128 nümunəsi yoxdur (bir dövrdə yalnız 40 nümunə aldım). Bunun səbəbi ola biləcəyini düşünürəm Serial.println () 3 baytı tam ədədə çevirən əmr və bunlar mənim üçün əlverişli deyil.

Anlayıram ilə bir fərq var Serial.printlnSerial.write. Serial.write ikili məlumatları serial portuna yazır və Serial.print məlumatları insan tərəfindən oxunaqlı ASCII mətni olaraq serial portuna yazdırır.

Alınan məlumatları çevirmək istəyirəm uint8 başqa bir python kodu əlavə edərək formatlaşdırın:

Dəyərləri görə bilmək üçün (0-255). Hələ bununla bağlı problem yaşayıram. Məsləhət varmı? Hər hansı bir yardım çox qiymətləndirilir. :)


Həqiqətən Ubuntu-da işarələnmiş olan bir əmr qayıtma funksiyası və ya qaynaqlanan skript kontekstində mənası olan yalnız ədədi dəyərləri - çıxış vəziyyətlərini qaytara bilər. Mənbə adam sh:

Return əmrinin sintaksisidir

Kabuk skriptinizdə qalan hər şey düzgün görünür. Bunun əvəzinə echo $ COLOR istifadə etməlisiniz qayıt və digər echoları bastırmaq.

Daha çox məlumatı əsas ssenariyə qaytarmaq lazımdırsa, hər şeyi bir sətir şəklində çıxara və ayrı bölmək olar sahələr sətri massivə çevirə biləcəyiniz əsas ssenaridə ayırıcı rolunu oynayacaq bir xarakterə görə. Məsələn (burada, ayırıcımız haradadır və -n echo içərisində yeni xətt xarakterini təmin edəcəkdir):

Skript tərəfindən verilən və əsas skript tərəfindən tələb olunmayan digər məlumatlar bəzi günlük sənədlərinə yönləndirilə bilər:

Təəssüf ki, Python ilə çox təcrübəm yoxdur, amma yuxarıdakı .sh skriptinin (istinad) nəticəsini idarə edə biləcək bir .py skriptini təqdim edirəm:


4 Cavablar 4

Faylınızdakı bütün təkrarlanan materialları əvəz etmək üçün bu skripti işə sala bilərsiniz. Mətn redaktoruna yapışdırın və Skript işlət düyməsini vurun.

Bütün obyektləri axtarır və sonra maddi adın birinci hissəsini (.001 şəkilçisindən əvvəlki hissə) eyni adlı hər hansı bir materialla müqayisə edir və uyğunluq tapılarsa obyekt materialını uyğun materialla əvəz edir.

Fikir Tam bir Səhnə surətini çıxarmaq və sonra bütün material dublikatlarını silmək üçün bu skripti işə salmaqdır.

Ssenariyə başlamazdan əvvəl materiallarınızın düzgün adlandırıldığından əmin olun. .001, .002 və ya 003 ilə bitən hər hansı bir material "orijinal versiyası" ilə əvəz olunacaq.

Ssenari üçün kredit istifadəçiyə verilir liero bu BlenderArtist.org səhifəsində

Ctrl + Shift + O işi yenidən yükləyərək işi tamamlayır.

Aşağıdakı Əlavə boş bir mənzərə yaradır, bütün obyektləri təkrarlayır və obyektlərin materiallarını təkrarlamadan yenisinə bağlayır:

Aktivləşdirildikdən sonra boşluğa vurun 3D görünüş və 'Duplicate Scene' işləyin. Diqqət yetirin ki, yalnız səhnə obyektlərinin surətidir, göstərmə və dünya parametrləri standartdır.

custom-scene-dublicator.py

Əlavəni vasitəsilə quraşdırın Fayl> İstifadəçi Tercihləri> Əlavələr> Fayldan Quraşdırın.

Bu sadəcə istifadə etmək qədər sadə olmazdımı? Yeni Səhnə> Nesnələri Bağlayın Yeni Səhnə> Nesne Verilerini Bağla?

Bundan sonra bütün obyektləri seçib U düyməsinə basa bilərsiniz Tək istifadəçi> obyekt et və ya Tək istifadəçi> obyekt və məlumatlar et və səhnənizi müstəqil obyekt məlumatları ilə eyni obyektləri qoruyaraq bütün yeni obyektlərlə demək olar ki, çoxaltmış olacaqsınız.

Yalnız bir xəbərdarlıq budur ki, eyni səhnənin içində obyekt nümunələri varsa, tək bir istifadəçi edərkən əlaqələri də itəcəkdir.

Shift + L istifadə edərək eyni obyekt məlumatları olan bütün obyektləri seçərək bunun üzərində işləyə bilərsiniz Bağlı> Nesne Veriləri seçin, bunlardan birinin aktiv obyekt olduğuna əmin olun, sonra aktiv obyektin tək istifadəçisi olun, sonra hamısını Ctrl + L ilə yenisinə bağlayın. Link> Nesne Verileri

Səhnəni bütün materiallardan və yetim parçalarından təmizləmək üçün çox sadə bir ipucu, dalğa önü formatında (.obj) ixrac etməkdir. Nəticədə iki sənəd əldə edəcəksiniz. Obj faylı, boş modifikatorlar xaricində qarışdırıcıdan çox az fərqlə obyektlərinizi ehtiva edir. Məsələn, ixrac edərkən suburf modifikatoru aktivdirsə, obyekt suburf tətbiq edilərək qeyd olunur. Diziler, tel kafes və ya qəfəs mütləq .obj obyektlərinə tətbiq olunur.

Digər fayl (.mtl) bütün materialları (asılı toxumaları ilə) əhatə edir. Silin və ya yenidən düzəldin və boş bir qarışdırıcı mühitində .obj-yə yenidən daxil olun. Bütün arzuolunmaz hissələr yeni qarışıq sənədindən təmizlənir.

Bir səhnəni Cycles Render-ə köçürdükdə və ya qarışıqlarınızın valideyn arayışları bastırıldıqda silinməyən yetim hissələrlə (yaddaş sızıntısı) dolu olduqda faydalı ola bilər.


ArcGIS Server SSL Məsələlərinin xülasəsi

ThomasColson tərəfindən

Bu, həqiqətən, yalnız bütün SSL məsələlərini "işarələməyimdə" kömək etmək üçündür, çünki bunların çoxunu yaşayırıq, digər insanlara kömək edəcəyini ümid edirəm!

  1. Web App builder-də təhlükəsiz SSL xidmətləri uğursuz olur.
  2. ArcGIS Portal 10.3 - Daxili şəbəkə sualları üçün SSL Sertifikatı
    1. Test sertifikatı statusu olan az bilinən bir REST yoxlayıcısı daxildir: sərin! https: //%3Cserver.domain.com%3E: 7443 / arcgis / sharing / checkUrl.jsp? url =% 3CinsertURLthatisboundtothecer.
    1. Poster öz CA serverindən istifadə edərək tədqiq edilmiş bir sertifikat ala bilmir
    1. Ev mesajını alın: düzgün DNS ləqəbini istifadə edin!
    1. "HTTPS" nin aktivləşdirilməsinin yalnız aşağı hissədə bəzi tətbiq səhvlərinə səbəb olduğu görünür
    1. PKI'ya ehtiyacınız varsa Amazon ECW istifadə etməyin!
    1. SSL funksionallığının başqa bir testi SSL Server Testi (Qualys SSL Labs tərəfindən dəstəklənir)
    1. PKI- Portal python ilə işləmir
    1. SSL-nin aktivləşdirilməsi GP alətlərini pozur
    1. Tərs vəkilin dəhşətləri
      1. 40694 - SSL ilə IIS ARR-də Server üçün ArcGIS 10.1 ilə əks proxy qurun
      1. Serts FQDN istifadə etməlidir
      1. Vəhşi kartların işə yaramadığına dair başqa bir təsdiq
      1. Şifrələri şifrələmək üçün SSL tələb olunur
      1. Unutmayın, ArcGIS Server ayrı bir Apache Web Serverdir: Etibarlı bir sertifikata da ehtiyac var! AGIS Sertifikatının etibarlı CA tərəfindən imzalanması lazımdır
      1. SSL performansı öldürür. Nə sürpriz.
      1. Bu böyük bir problemdir: Təşkilat yalnız HTTPS tələb edirsə, portalda HTTP məzmunu istifadə edə bilməz

      4 Cavablar 4

      10 dəfə bir hərəkət etmək istəyirsən. Döngü sayğacı kodunuz üçün heç vaxt əhəmiyyət vermir, yalnız 10 sual verməlisiniz. Kodu necə yazdığınıza sahibsiniz:

      6 yerdə, hamısı zəruridir, əks təqdirdə çox dəfə döngə edərdiniz. Bu, çox səhvlərə meyllidir. Bölmə üçün dəstək əlavə etsəniz, iki dəfə daha yazmalısınız. Yaxşı qayda heç vaxt özünüzü təkrarlamayın!

      Python-da döngələrin sayılması ilə maraqlanmadığınız zaman 10 dəfə döngünün ən yaxşı yolu budur:

      Sayı artırmaqdan narahat olmağa ehtiyac yoxdur. Qoyun () sizin üçün bunu etsin.

      Özünüzü təkrar etməyin

      Əlavə etmə, çıxma və vurma kodu eynidır. Fərq yalnız hansı əməliyyatı etdiyiniz və hansı əməliyyatı yazdırdığınızdır. Əksəriyyəti onsuz da yenidən işlənmişdir. Əməliyyatı yerinə yetirmək üçün op () istifadə edirsiniz. Buna görə bir addım daha irəli gedək:

      Və sonra, yalnız bir real dəyişiklik ilə əlavə etmək üçün məntiqinizi çox kopyalayıram (və bəzi dəyişənlərin adını dəyişdirirəm):

      Sual və cavab əvəzinə dəyişənlərinizi faktiki və gözlənilən adlandırdım, çünki sual həqiqətən bir suala aid deyildi. Ayrıca + = 1, bir-bir artırmağın daha qisa bir şəkildə ifadə edilməsidir.

      Cavabı istifadəçiyə söyləyin?

      İstifadəçi səhv başa düşərsə, onlara düzgün cavabı söyləmək istəyirsən?

      Bitir

      Nə vaxt bitdiyini bilmək üçün sayını yoxlamağa ehtiyac yoxdur (və ya indi, _). Yalnız döngənin bitməsini gözləyin, bu anda hesabı yazdıra bilərsiniz. Beləliklə axın belə görünür:

      Adətən hesabı X / 10 kimi ifadə etsəniz də, 10-dan X deyil, sadəcə gülməlidir.


      3 Cavablar 3

      Alternativ olaraq: g əmrini istifadə edə bilərsiniz. Edərdim:

      şərh vermək. Çox yaxşıdır, çünki axtarış və dəyişdir əmrindən daha oxunaqlıdır (və daha qısadır). İzahat:

      Yenidənqurma eyni sətirdə işləyir, yalnız başqa bir sətir axtarmır və ^ x yerinə I # istifadə edir. Boşluq olmayan ilk sütuna # # əlavə # deməkdir.

      Bir plagin istifadə etmək istəsəniz olduqca sadə ola biləcək bir həll yolu var: NERDCommenter.

      Bu plagin, github səhifələrinə görə "sıx bir orgazm şərhi" üçün hazırlanmışdır. Daha doğrusu, şərhləri idarə etmək üçün bir neçə uyğunlaşma yaradır və uyğunlaşmalardan biri bir xəttin şərhlərini dəyişdirməyə imkan verən & ltLeader & gtci-dir.

      Qlobal bir əmrlə birləşərək bacardığınızı edə bilərsiniz. Deyək ki, lideriniz aşağıdakı əmrdən istifadə edə bilər:

      Və bu, pdb.set_trace () ilə uyğun gələn sətirlərdə olan şərhləri dəyişdirəcəkdir.

      & Ltleader & gt-i birbaşa normal əmrdə asanlıqla istifadə edə bilməyəcəyinizi unutmayın (bu barədə sualıma baxın)

      Lideriniz & ltspace & gt varsa, etməlisiniz:

      Düyməyə uyğunlaşdırmağın asandır:

      Və nəhayət bu metodun böyük üstünlüyü ondan ibarətdir ki, NERDcommenter düzəliş etdiyiniz dili avtomatik olaraq idarə edir, beləliklə hansı dildə düzəliş etdiyinizdən asılı olmayaraq müəyyən bir naxışla uyğun gələn sətirlərdə şərhləri dəyişdirə bilən bir əmr yarada bilərsiniz:

      İndi hansı dildən istifadə etdiyinizdən asılı olmayaraq istifadə edə bilərsiniz: foo ilə uyğun gələn bütün sətirlərin şərhini dəyişdirmək üçün ToogleCom foo. (Lideriniz deyilsə, cavabımın əvvəlki bəndinə baxın)

      Fərqli şərh üslublarına ehtiyacınız varsa, istifadə olunan Xəritəçəkməni dəyişə bilərsiniz, daha çox məlumat üçün bax: h NERDComFunctionalitySummary.


      PostgreSQL-ə JSON daxil etmək üçün Python istifadə [qapalı]

      Bu sualı yaxşılaşdırmaq istəyirsiniz? Sualı verilənlər bazası administratorları yığın mübadiləsi üçün mövzuya uyğun şəkildə yeniləyin.

      Məndə aşağıdakı cədvəl var:

      İndi əsasən bir python skriptinin köməyi ilə bir json obyektini yükləmək və python skriptinin csonu masaya daxil etməsinə icazə vermək istəyirəm. Psql vasitəsilə bir JSON daxil etməyi bacardım, amma həqiqətən bir JSON-Fayl daxil etmir, daha çox bir JSON sənədinə bərabər bir sətir əlavə edir və PostgreSQL onu yalnız json kimi qəbul edir.

      JSON-File əlavə etmək üçün psql ilə etdiklərim:

      Faylı oxumaq və məzmunu dəyişənə yükləmək

      Json_populate_recordset () və əvvəlcədən təyin edilmiş 'content' dəyişənindən istifadə edərək JSON-un daxil edilməsi:

      Bu yaxşı işləyir, amma python skriptimin də bunu etməsini istəyirəm. Aşağıdakı Kodda əlaqə artıq qurulub:

      Aşağıdakı xətanı alıram:

      JSON məzmununu pgAdmin4-ə yapışdırsam və json_populate_recordset () içindəki sətirdən istifadə etsəm, işləyir. Hesab edirəm ki, JSON sənədini səhv işlədirəm.


      Videoya baxın: تعلم لغة بايثون - بايثون هي اسوأ اختيار